Хорошо, так что после того, как я столкнулся с той же проблемой и сделал серьезную копку, думаю, у меня есть решение Эван Вондрасек был на правильном пути с командой rundll, и я смог добиться следующего, работая в тестовой среде.
По сути, Ури Абрамсон был прав, что Guid в команде rundll.exe является ссылкой на приложение clickonce, но его больше нет в реестре. На самом деле он ссылается на другие ключи в HKCU\Software\Classes
.
Чтобы справка по файлу работала, сначала вам нужно ProgID
для вашего приложения. Насколько мне известно, это может быть все, что вы хотите, или то, что вы обычно устанавливаете в меню публикации ClickOnce в Visual Studio.
Вам также нужно будет создать новый Guid и знать содержимое файла Application Reference (.appref-ms).
Для моего примера я буду использовать следующее:
ProgId: FASERVER.TestApp
Guid: ce6b2c69-ec54-4182-a87f-74c5dfe1a03e
AppRefFileContents: http://SomeAddress.SomeDomain/TestApp/TestApp.application#TestApp.application, Culture=neutral, PublicKeyToken=df31b9b884b9be10, processorArchitecture=x86
Пожалуйста, используйте ваш эквивалент вышеуказанных значений в следующем коде.
Для начала создайте новый раздел реестра под HKCU\Software\Classes
с именем FASERVER.TestApp
со следующими строками:
(Default) = SomeFileType
AppId = TestApp.application, Culture=neutral, PublicKeyToken=df31b9b884b9be10, processorArchitecture=x86
DeploymentProviderUrl = http://SomeAddress.SomeDomain/TestApp/TestApp.application
Guid = {ce6b2c69-ec54-4182-a87f-74c5dfe1a03e}
После того, как вы установили эти значения, создайте два новых вспомогательных ключа shell
и shellex
.
Установите (Default)
значение shell
на open
. Затем создайте дополнительный ключ shell
с именем open
и дополнительный ключ open
с именем command
. Установите (Default)
значение command
на следующее:
rundll32.exe dfshim.dll, ShOpenVerbExtension {ce6b2c69-ec54-4182-a87f-74c5dfe1a03e} %1
Создайте вложенный ключ shellex
с именем IconHandler
и установите для его значения (Default)
значение {ce6b2c69-ec54-4182-a87f-74c5dfe1a03e}
Перейдите к HKCU\Software\Classes\CLSID
и создайте новый ключ {ce6b2c69-ec54-4182-a87f-74c5dfe1a03e}
со следующими строками:
(Default) = Shell Icon Handler For Tif File
AppId = TestApp.application, Culture=neutral, PublicKeyToken=df31b9b884b9be10, processorArchitecture=x86
DeploymentProviderUrl = http://SomeAddress.SomeDomain/TestApp/TestApp.application
IconFile = YourIconFile.ico
Примечание. Ваша иконка должна быть в вашем проекте ClickOnce.
Теперь создайте вложенный ключ в {ce6b2c69-ec54-4182-a87f-74c5dfe1a03e}
с именем InProcServer32
со следующими значениями:
(Default) = dfshim.dll
ThreadingModel = Apartment
Наконец, нам нужно связать предыдущие ключи с желаемыми ассоциациями файлов. Для этого перейдите к HKCU\Software\Classes
и выполните следующие действия для каждого желаемого расширения файла.
Установите строки FileExt следующим образом:
(Default) = FASERVER.TestApp
AppId = TestApp.application, Culture=neutral, PublicKeyToken=df31b9b884b9be10, processorArchitecture=x86
DeploymentProviderUrl = http://SomeAddress.SomeDomain/TestApp/TestApp.application
Guid = {ce6b2c69-ec54-4182-a87f-74c5dfe1a03e}
Вот и все! Вы должны быть сделаны.
Обратите внимание, что это не сделает ваше приложение программой по умолчанию для этого типа файлов, а просто добавит запись «Библиотека поддержки приложений ClickOnce» в меню «Открыть с помощью».
Надеюсь, что это работает для кого-то, кроме меня, и извините за длинный пример.