2010-07-28 43 views
5

我應該將哪些數據添加到Windows註冊表中以正確創建文件關聯?如何正確添加文件關聯到Windows註冊表?

我問這個問題主要是因爲我幾年前編寫的一些舊應用程序,它們使用Visual Studio .NET的Windows Installer打包程序來創建文件關聯。我安裝的擴展是.whr.encxml

現在,在安裝了這些應用程序的計算機上,出現了一個奇怪的問題有時 - 當在谷歌瀏覽器或Internet Explorer(特別是exe,msi或zip文件)中下載文件時,瀏覽器將將文件擴展名更改爲由我的安裝程序安裝的其中一個擴展名。我不知道它是否影響其他瀏覽器 - 這兩個有什麼共同點?所以......如果你下載了,例如,http://example.com/downloads/application.exe,那麼這個文件將被下載爲http://example.com.downloads/application.encxml(或者.whr,無論哪一個選擇哪一個),因爲沒有任何明顯的原因。

我應該注意的是,HKCR\.whrHCKR\.encxml鍵引用(客戶經理加密的XML文件和工作時間記錄)有空格他們,當我在Visual Studio中創建的協會,我沒加一」的關鍵。 「到前面。也許空格不允許,和/或你應該以「。」作爲前綴?註冊表代碼似乎沒問題,但通過查看註冊表,我發現每個其他應用程序都不會在關聯類中使用空間,也不會在任何已知的計算機上安裝任何應用程序的其他文件擴展名時發生此問題 - 只有由我的應用程序的VS安裝程序創建的。我已經粘貼了相應的註冊表項和與文件擴展名相關的值的註冊表轉儲 - 因爲MSI是專有的,我不知道這是否全是它,但是從我從其他應用程序知道的這應該是一切。多年來,我一直在想這個問題,但永遠不會想出來。我很快就用新產品替換了那些舊應用程序之一,所以這次我想確保沒有像這樣的奇怪的錯誤...

這是數據(請注意,我已經指出了與下面的值//註釋中一些二進制字符串):

[HKEY_CLASSES_ROOT\.encxml] 
"Content Type"="application/octet-stream" 
@="Account Manager Encrypted XML File" 

[HKEY_CLASSES_ROOT\.encxml\Account Manager Encrypted XML File] 

[HKEY_CLASSES_ROOT\.encxml\Account Manager Encrypted XML File\ShellNew] 

[HKEY_CLASSES_ROOT\Account Manager Encrypted XML File] 
@="Account Manager Encrypted XML File" 

[HKEY_CLASSES_ROOT\Account Manager Encrypted XML File\DefaultIcon] 
@=hex(2):25,00,41,00,50,00,50,00,44,00,41,00,54,00,41,00,25,00,5c,00,4d,00,69,\ 
    00,63,00,72,00,6f,00,73,00,6f,00,66,00,74,00,5c,00,49,00,6e,00,73,00,74,00,\ 
    61,00,6c,00,6c,00,65,00,72,00,5c,00,7b,00,42,00,36,00,34,00,31,00,37,00,36,\ 
    00,30,00,42,00,2d,00,37,00,44,00,42,00,37,00,2d,00,34,00,46,00,31,00,42,00,\ 
    2d,00,41,00,44,00,36,00,45,00,2d,00,30,00,41,00,33,00,34,00,32,00,30,00,46,\ 
    00,35,00,45,00,45,00,30,00,44,00,7d,00,5c,00,5f,00,36,00,46,00,45,00,46,00,\ 
    46,00,39,00,42,00,36,00,38,00,32,00,31,00,38,00,34,00,31,00,37,00,46,00,39,\ 
    00,38,00,46,00,35,00,34,00,39,00,2e,00,65,00,78,00,65,00,2c,00,30,00,00,00 

// Product code GUID is: {F7F214E9-ED37-4AE1-B0D2-93427973E60A}, which is different from below but I probably changed it at some point for some reason 
// %APPDATA%\Microsoft\Installer\{B641760B-7DB7-4F1B-AD6E-0A3420F5EE0D}\_6FEFF9B68218417F98F549.exe,0 

[HKEY_CLASSES_ROOT\Account Manager Encrypted XML File\shell] 
@="open" 

[HKEY_CLASSES_ROOT\Account Manager Encrypted XML File\shell\open] 
@="&Open" 

[HKEY_CLASSES_ROOT\Account Manager Encrypted XML File\shell\open\command] 
@="\"C:\\Program Files\\Petroules Enterprises\\Account Manager\\AccountManager.exe\" \"%1\"" 
"command"=hex(7):4c,00,29,00,25,00,59,00,63,00,73,00,67,00,2d,00,4c,00,41,00,\ 
    28,00,30,00,64,00,66,00,34,00,36,00,75,00,5f,00,50,00,27,00,3e,00,27,00,7d,\ 
    00,27,00,66,00,25,00,6f,00,59,00,64,00,4b,00,69,00,48,00,74,00,7a,00,35,00,\ 
    21,00,55,00,2b,00,6c,00,68,00,54,00,20,00,22,00,25,00,31,00,22,00,00,00,00,\ 
    00 

// This is a bizarre-looking value... what's up with that? 
// L)%Ycsg-LA(0df46u_P'>'}'f%oYdKiHtz5!U+lhT "%1" 

[HKEY_CLASSES_ROOT\.whr] 
"Content Type"="application/octet-stream" 
@="Work Hours Record" 

[HKEY_CLASSES_ROOT\.whr\Work Hours Record] 

[HKEY_CLASSES_ROOT\.whr\Work Hours Record\ShellNew] 

[HKEY_CLASSES_ROOT\Work Hours Record] 
@="Work Hours Record" 

[HKEY_CLASSES_ROOT\Work Hours Record\DefaultIcon] 
@=hex(2):25,00,41,00,50,00,50,00,44,00,41,00,54,00,41,00,25,00,5c,00,4d,00,69,\ 
    00,63,00,72,00,6f,00,73,00,6f,00,66,00,74,00,5c,00,49,00,6e,00,73,00,74,00,\ 
    61,00,6c,00,6c,00,65,00,72,00,5c,00,7b,00,46,00,41,00,32,00,33,00,44,00,37,\ 
    00,36,00,34,00,2d,00,46,00,36,00,34,00,39,00,2d,00,34,00,38,00,46,00,39,00,\ 
    2d,00,38,00,44,00,30,00,42,00,2d,00,45,00,31,00,38,00,38,00,35,00,41,00,39,\ 
    00,38,00,31,00,46,00,39,00,39,00,7d,00,5c,00,5f,00,36,00,46,00,45,00,46,00,\ 
    46,00,39,00,42,00,36,00,38,00,32,00,31,00,38,00,34,00,31,00,37,00,46,00,39,\ 
    00,38,00,46,00,35,00,34,00,39,00,2e,00,65,00,78,00,65,00,2c,00,30,00,00,00 

// Product code GUID: {FA23D764-F649-48F9-8D0B-E1885A981F99}, same as below 
// %APPDATA%\Microsoft\Installer\{FA23D764-F649-48F9-8D0B-E1885A981F99}\_6FEFF9B68218417F98F549.exe,0 

[HKEY_CLASSES_ROOT\Work Hours Record\shell] 

[HKEY_CLASSES_ROOT\Work Hours Record\shell\open] 
@="&Open" 

[HKEY_CLASSES_ROOT\Work Hours Record\shell\open\command] 
@="\"C:\\Program Files\\Petroules Enterprises\\Work Hours Calculator\\WorkHoursCalculator.exe\" \"%1\"" 
"command"=hex(7):28,00,5d,00,56,00,49,00,79,00,55,00,7b,00,5e,00,4e,00,3f,00,\ 
    26,00,68,00,48,00,7e,00,53,00,24,00,6e,00,31,00,36,00,59,00,3e,00,33,00,75,\ 
    00,5f,00,7d,00,47,00,26,00,70,00,79,00,75,00,78,00,38,00,4e,00,72,00,43,00,\ 
    6e,00,67,00,27,00,44,00,67,00,42,00,20,00,22,00,25,00,31,00,22,00,00,00,00,\ 
    00 

// Same bizarre-looking type of value as before, but different... 
// (]VIyU{^N?&hH~S$n16Y>3u_}G&pyux8NrCng'DgB "%1" 
+0

查看http://stackoverflow.com/questions/69761/how-to - 爲一些成功完成此工作的代碼項目提供了一個文件擴展到當前可執行文件的可執行文件。即使你沒有用C#編寫代碼,你仍然可以閱讀代碼來弄清楚它們是如何實現的。 – 2010-07-28 22:54:16

+0

對不起羅伯特,但那是不正確的。 Windows Installer是一個聲明式編程模型,不是一個必需的。看一個C#示例並進行仿真將被認爲是MSI世界中一個簡單的,過程中的反模式。 – 2010-07-30 22:03:22

回答

相關問題