星期二, 10月 16, 2012

新滑鼠啟用

Microsoft Arc Touch,左鍵硬了點也遠了點,以觸控取代滾輪還蠻新鮮的。

星期四, 9月 06, 2012

網頁一片空白?停用代理伺服器也許可解決

IE 無法安裝附加元件的解決方法

  1. 安全性->ActiveX「不」篩選。
  2. 網際網路選項->進階->安全性->「不」啟用記憶體保護以協助避免網路攻擊。
  3. 執行 iexplore -extoff 或在網址列輸入 about:NoAdd-ons,進入「關閉所有附加元件」的狀態,再到管理附加元件->顯示所有附加元件,一一停用。
  4. 關閉所有瀏覽器再開啟,應該就可以安裝附加元件。
  5. 如果是 Windows 7,還有一個「群組原則設定」必須考慮,可參考 http://www.sevenforums.com/system-security/145610-cannot-install-active-x-control.html 其中 jav 的回覆。
[2014/06/25 補充]
  1. 漏了前提假設 :附加元件是經「受信任憑證中心」所發憑證的簽署。如果不是這樣,多半調低安全性即可解決。
  2. 恢復瀏覽器所有的預設值也許有幫助。
  3. 如果是 Windows 7,又將「使用者帳戶設定」拉到最低,也會因為無法提示造成問題,只要恢復使用者帳戶設定回預設值即可。

星期三, 7月 25, 2012

.NET ActiveX 元件的版本控制

一般 ActiveX 標籤若有附加版本資訊,就有自動下載更新的機制。但依賴 .NET 的 ActiveX 元件,必須額外寫入以下機碼作為比較基礎:
[32 bits OS] HKEY_CLASSES_ROOT\CLSID\{...}\InstalledVersion
[64 bits OS] HKEY_CLASSES_ROOT\Wow6432Node\CLSID\{...}\InstalledVersion
微軟經常沒把事情做完呀!
補充一下:透過 REG ADD 寫入上述機碼時,不必判斷作業系統是哪一種,一律當作是 32 bits 來寫就是了,64 bits 的寫入位置會自動調整。

星期五, 7月 20, 2012

可攜視窗作業系統

以往總想用 USB 接一個可 Windows 開機的硬碟,一直沒試成功。近來需要 Windows 64 位元的測試環境,但本機是 32 位元,VirtualBox 上的 Guest 一直有問題,只好試著先裝個可攜的 64 位元 Linux,再加上 VirtualBox 和 Windows 64 位元 Guest,有點麻煩,但可以用。
重點是 Linux Live CD 不要直接放在外接硬碟上,而是要另外放在別的 USB Disk(小容量,8G 就夠了),開機後先將 Linux 裝在大容量的外接硬碟上,再從大硬碟開 Linux,裝 VirtualBox。

星期五, 6月 08, 2012

以強式名稱簽署第三方組件

專案要用到第三方開放原始碼的組件,而且希望簽署產出,所以被引用的組件需要符合強式名稱,但是沒有,怎麼辦?若有完整的原始碼當然容易,但也許沒有(或不想大動別人的東西)的時候,還是有方法的。先準備以下內容:
  1. 安裝 Windows SDK
  2. 簽署用的 CodeKey.pfx
  3. 要開刀的 WeakName.dll
處理步驟如下:
  1. 反組譯組件,指令為 ildasm.exe /all /out=WeakName.il WeakName.dll,除了正常輸出之外,還附帶 WeakName.res。
  2. 把金鑰拆出,指令為 sn.exe -p CodeKey.pfx CodeKey.snk。
  3. 重組指令為 ilasm.exe /dll /resource=WeakName.res /key=CodeKey.snk WeakName.il,產出結果就是符合強式名稱的組件。
  4. 確認用的指令為 sn.exe -T WeakName.dll。
需要注意的是,「以強式名稱簽署組件」指的是在 Visual Studio 開發工具裏的 Project -> Properties -> Signing -> Sign the assembly,很容易與「數位簽署檔案」混淆。依據微軟官方說法:
  • 強式名稱工具 (sn.exe) 可以協助您以強式名稱簽署組件,提供了金鑰管理、簽章產生和簽章驗證的選項。
  • 簽署工具 (signtool.exe) 能夠數位簽署檔案、驗證檔案中的簽署或為檔案加上時間戳記。
也順便提一下,已經數位簽署的檔案,在檔案總管按滑鼠右鍵看內容,會多出一個「數位簽章」的頁籤。要達成此效果的指令如下:
  • signtool.exe sign /f CodeKey.pfx /p secret /t http://timestamp.verisign.com/scripts/timstamp.dll /v WeakName.dll