Как я могу связать пользовательский протокол URL с приложением ClickOnce? - PullRequest
3 голосов
/ 07 сентября 2011

Я хочу связать пользовательский протокол URL (например, myprotocol://SomeFolder/SomePage) с приложением ClickOnce .

Я могу создать ассоциацию без проблем- проблема в том, что при каждом обновлении приложения (что часто происходит) путь к файлу EXE меняется.

Есть ли способ обойти эту проблему?

Ответы [ 3 ]

4 голосов
/ 12 октября 2011

Похоже, ответ на этот вопрос вы не можете, однако я нашел решение.

Я создал модуль запуска (очень простое приложение), который находит ярлык и передает его параметры запуска в приложение ClickOnce. Мне нужно установить модуль запуска традиционным способом, но при необходимости основное приложение все еще можно обновить через ClickOnce.

Я нашел эти ссылки полезными:

0 голосов
/ 09 сентября 2016

Если вы пытаетесь, чтобы 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.

0 голосов
/ 05 сентября 2016

После установки приложения создайте ссылку в меню «Пуск».Ссылка на самом деле представляет собой файл с расширением "appref-ms".Итак, хитрость заключается в том, чтобы зарегистрировать протокол, который будет использовать «appref-ms» для открытия приложения.

Итак, когда вы запускаете приложение ClickOnce, вы можете создать следующую запись реестра для регистрации вашего протокола.HKEY_CLASSES_ROOT myprotocol = {Описание протокола} команда открытия оболочки = проводник% 1

Вот и все.Теперь, когда кто-то щелкнет по URL-адресу, например, myprotocol: XXX, ваше приложение откроется и откроется как приложение «ClickOnce», чтобы оно проверило, есть ли новая версия и т. Д.

...