2010-07-28 5 views
5

Какие данные и где, следует ли добавить в реестр Windows надлежащее создание ассоциации файлов?Как правильно добавить ассоциации файлов в реестр Windows?

Я задаю этот вопрос прежде всего из-за некоторых старых приложений, которые я написал много лет назад, которые использовали Visual Studio .NET для Windows Installer для создания ассоциаций файлов. Установки, которые я установил, были .whr и .encxml.

Теперь, на компьютере, на котором установлены эти приложения, возникает странная проблема иногда - при загрузке файла в Google Chrome или Internet Explorer (особенно exe, msi или zip-файл) браузер будет измените расширение файла на одно из расширений, которое было установлено моим установщиком. Я не знаю, влияет ли это на другие браузеры - у этих двух есть что-то общее? Итак ... если вы загружаете, например, http://example.com/downloads/application.exe, файл будет загружен как http://example.com.downloads/application.encxml (или .whr, какой бы он ни выбрал на данный момент) без всякой видимой причины.

Я хотел бы отметить, что ключи, что HKCR\.whr и HCKR\.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 -associate-a-file-extension-to-current-executable-in-c для некоторых проектов кода, которые сделали это успешно. Даже если вы не набираете код на C#, вы все равно можете прочитать код, чтобы выяснить, как они это делают. –

+0

Извините, Роберт, но это неправильно. Установщик Windows - это модель декларативного программирования, не являющаяся императивной. Глядя на пример C# и эмулируя его, он будет считаться неустойчивым, вне процесса антипаттерна в мире MSI. –

ответ

2

В установщике Windows мы используем стандартные действия RegisterExtensionInfo:

http://msdn.microsoft.com/en-us/library/aa371156(v=VS.85).aspx

, которая использует в основном использует таблицу Удлинителя и глагол вместе с некоторыми присоединяются к COM связанных таблиц:

http://msdn.microsoft.com/en-us/library/aa368571(v=VS.85).aspx (Extension Table) http://msdn.microsoft.com/en-us/library/aa372487(v=VS.85).aspx (таблица глаголов)