2009-01-09 50 views
1

我有一個應用程序與Wise安裝程序一起安裝(編輯:明智創建Setup.exe文件,而不是MSI)。在安裝時,一個圖標被設定爲一個特定的文件類型:在Windows上第一次啓動後文檔圖標發生變化

HKEY_CLASSES_ROOT\.auz\DefaultIcon = C:\Path\To\App\some_icon.ico,0 

右後安裝,但是,資源管理器選擇使用通用的「白片+應用程序圖標」圖標,這是不同的,以顯示該圖標(和不是由我提供的)。

第一次啓動時,應用程序本身會註冊圖標和其他文件關聯,以便上次運行的版本「擁有」這些文檔。此時,資源管理器將此文件類型的圖標變爲,並顯示正確的一個,但是當我查看註冊表時,DefaultIcon的值與完全相同。

這是我到目前爲止

  • 嘗試刪除從註冊表中的所有條目,並寫他們自己。
  • 安裝後,「觸摸」DefaultIcon的值,然後啓動一個只調用SHChangeNotify(SHCNE_ASSOCCHANGED)(我的程序在更新註冊表中的文件關聯後執行此操作)的小程序。
  • 安裝後,查殺並重新啓動資源管理器。
  • 安裝完成後,使用TweakUI「修復」桌面上的圖標。

這些都不起作用。獲得正確圖標的唯一方法是讓程序自己安裝它。我無法在註冊表中找到任何更改。我正在拉我的頭髮。

我想什麼來避免

  • 測試與另一個安裝程序軟件
  • 更改安裝腳本太多(我沒有懷斯本身,因爲安裝程序被內置在另一臺機器上需求)。
  • 將圖標嵌入到可執行文件中。

有關如何讓Explorer在安裝後顯示正確圖標的任何建議?

回答

1

這裏的解決方案。

每個文件類型(假設「.auz」在這種情況下)與註冊:

  • 一個DefaultIcon鍵與路徑圖標資源,
  • 一個爲HKEY_CLASSES_ROOT\.auz\(default)值值給文件類型的描述,例如「Foobar文件」。

除此之外,還有爲「Foobar的文檔」文件類型的條目,或者更具體地說,如何從外殼打開這些文件的關鍵:

HKEY_CLASSES_ROOT\Foobar Document\Shell\command\open\(default) = C:\Path\To\App.exe "%1" 

顯然,此密鑰取代爲特定文件擴展名寫入的值。因爲圖標是.exe文件的外部,Windows資源管理器隨後使用該應用程序的第一個圖標來爲類型爲「Foobar文檔」(即我提到的「白色頁面+應用程序圖標」圖標)的所有文件創建圖標。

現在,我有什麼錯的是應用程序本身並啓動時的

HKEY_CLASSES_ROOT\.auz\(default) 

的值更改爲一個稍微不同的值,說「Foobar的1.2文件」(與不是幹這個問題)。因此,鏈接到「Foobar文檔」的鏈接丟失了,並且.auz文件在第一次啓動後得到了它們的圖標。

因此,我通過簡單地刪除HKEY_CLASSES_ROOT\Foobar Document密鑰和voilà

1

幾件事情浮現在腦海中:

  • 爲什麼你有」 0' 在註冊表中的圖標之後?這會將顯示的圖標限制爲一個圖標。更好的辦法是有一個圖標文件,其中包含幾個圖標(相同的圖標用戶界面,但不同的大小/顏色深度) - 資源管理器有不同的圖標視圖!如果圖標文件只有一個圖標,請嘗試刪除',0'。
  • 它可能是註冊表最後寫在安裝程序中後,資源管理器得到通知更新?
  • 確保註冊表項寫入後的圖標文件存儲在磁盤上
  • 您應該使用明智的安裝自己的配置來註冊的文件類型。不確定,但我認爲explorer在完成msi的整個安裝之前不會做任何更改,因此手動調用SHChangeNotify()將無濟於事。 msi有它自己的表格,如果您使用正確的配置,Wise將添加它。

對於智者,請執行下列操作(而不是創建你自己的註冊表項):

  1. 根據功能詳細頁面組,選擇文件關聯頁面。
  2. 在當前功能下拉列表中選擇核心。
  3. 單擊窗口右側的添加並選擇新建。 出現文件關聯詳細信息對話框。
  4. 單擊擴展詳細信息選項卡。
  5. 瀏覽到QuickFacts目錄,選擇文件QckFacts.exe,然後單擊確定。
  6. 在擴展模塊中,輸入:qft
  7. 保留其餘字段的默認值,然後單擊確定。 擴展名.QFT被添加到安裝中。當最終用戶在目標計算機上雙擊帶有此擴展名的 文件時,將啓動QuickFacts應用程序 。
  8. 保存安裝

[編輯] 您也可以缺少必需的註冊表項(圖標可能不足以爲外殼,以顯示它):

HKEY_CLASSES_ROOT\.auz\(default) = auzfile 
HKEY_CLASSES_ROOT\.auz\shell\open\command = C:\Path\To\App.exe 
+0

Stefan,感謝您的意見。 「,0」似乎並不是我的問題的一部分,因爲軟件寫道,它的工作原理。安裝後通知瀏覽器也無濟於事,所以假設2和3似乎也是錯誤的。但好點。 – 2009-01-09 15:31:08

相關問題