Если вы пытаетесь, чтобы ClickOnce уже добавил соответствующий ключ в HKCR, просто без требуемого значения URL-протокола. Я добавил этот код в начало логики моего приложения:
try
{
RegistryKey rk = Registry.ClassesRoot.OpenSubKey("MyProgramName", true);
rk.SetValue("URL Protocol", "");
}
catch (Exception ex)
{
// handle, log, etc.
}
Что сработало хорошо, потому что именно это я и хотел, чтобы URL-протокол ссылался (например, "MyProgramName://....
". Я смог сделать это успешно, не имея моего приложения с правами администратора - возможно, это потребовалось бы, если бы я пытался однако зарегистрируйте другой обработчик, так что YMMV. По крайней мере, просмотр значения в нем должен дать вам представление о том, как правильно запустить приложение.
Вот ключ реестра, который был создан по умолчанию:
Windows Registry Editor Version 5.00
[HKEY_CLASSES_ROOT\MyAppName]
@="Electronic Data Interchange (EDI) File"
"AppId"="MyAppName.application, Culture=neutral, PublicKeyToken=31fc6d113f9bb401, processorArchitecture=msil"
"DeploymentProviderUrl"="file://server/share/MyAppName/MyAppName.application"
"Guid"="{MY_APP_GUID}"
[HKEY_CLASSES_ROOT\MyAppName\shell]
@="open"
[HKEY_CLASSES_ROOT\MyAppName\shell\open]
[HKEY_CLASSES_ROOT\MyAppName\shell\open\command]
@="rundll32.exe dfshim.dll, ShOpenVerbExtension {MY_APP_GUID} %1"
[HKEY_CLASSES_ROOT\MyAppName\shellex]
[HKEY_CLASSES_ROOT\MyAppName\shellex\IconHandler]
@="{MY_APP_GUID}"
И код, который я разместил, просто добавляет URL Protocol
с пустым значением под узлом MyAppName
.