Регистрация обработчика протокола в Windows 8
Я пытаюсь зарегистрировать свое приложение, которое будет обрабатывать открытие ссылок, e, g, /qaru.site/.... Мне нужно сделать это явно для Windows 8, я работаю в более ранних версиях Windows. Согласно MSDN, это изменилось в Win8.
Я прошел через страницу "Программы по умолчанию" на странице MSDN (msdn.microsoft.com/en-us/library/cc144154.aspx) в MSDN. Он обеспечивает отличное пошаговое руководство по работе с типами файлов, но подробно освещает протоколы. Регистрация приложения в URL-протоколе распространяется только на шаги, связанные с настройкой нового протокола, но не на то, как правильно добавить нового обработчика в существующий протокол.
Я также пробовал настройки реестра, изложенные в других сообщениях SO.
Еще одна вещь, приложение не приложение Metro/Windows Store, поэтому добавление записи в манифест не будет работать для меня.
Ответы
Ответ 1
Вы были на правильном пути с веб-страницей программ по умолчанию - на самом деле это моя ссылка для этого сообщения.
Ниже приведен пример их применения:
Во-первых, вам нужен ProgID
в HKLM\SOFTWARE\Classes
, который определяет, как обрабатывать любые введенные данные (ваш может уже существовать):
HKLM\SOFTWARE\Classes
MyApp.ProtocolHandler //this is the ProgID, subkeys are its properties
(Default) = My Protocol //name of any type passed to this
DefaultIcon
(Default) = %ProgramFiles%\MyApp\MyApp.exe, 0 //for example
shell
open
command
(Default) = %ProgramFiles%\MyApp\MyApp.exe %1 //for example
Затем заполните реестр с информацией по умолчанию в файле Capabilities
:
HKLM\SOFTWARE\MyApp
Capabilities
ApplicationDescription
URLAssociations
myprotocol = MyApp.ProtocolHandler //Associated with your ProgID
Наконец, зарегистрируйте свои возможности приложений с помощью DefaultPrograms:
HKLM\SOFTWARE
RegisteredApplications
MyApplication = HKLM\SOFTWARE\MyApp\Capabilities
Теперь все ссылки "myprotocol:" должны запускать %ProgramFiles%\MyApp\MyApp.exe %1
.
Ответ 2
Боковое примечание, так как это самый верный ответ, найденный при возникновении этой проблемы:
Убедитесь, что путь в командной строке оболочки - это правильный путь для вашего приложения.
Я потратил целый день на отладочную проблему, которая, казалось, повлияла только на Chrome и Edge в Windows 10. Они никогда не запускали обработчик протокола во время работы Firefox.
В чем проблема? Путь к файлу .bat используется смешанным
\ и/слэши.
Используя только правильные\слэши в пути, которые Edge и Chrome вдруг смогли получить запрос.
Ответ 3
LaunchUriAsync (Uri)
Запускает приложение по умолчанию, связанное с именем схемы URI для указанного URI.
Вы можете разрешить пользователю указывать в этом случае.
http://msdn.microsoft.com/library/windows/apps/Hh701476
// Create the URI to launch from a string.
var uri = new Uri(uriToLaunch);
// Calulcate the position for the Open With dialog.
// An alternative to using the point is to set the rect of the UI element that triggered the launch.
Point openWithPosition = GetOpenWithPosition(LaunchUriOpenWithButton);
// Next, configure the Open With dialog.
// Here is where you choose the program.
var options = new Windows.System.LauncherOptions();
options.DisplayApplicationPicker = true;
options.UI.InvocationPoint = openWithPosition;
options.UI.PreferredPlacement = Windows.UI.Popups.Placement.Below;
// Launch the URI.
bool success = await Windows.System.Launcher.LaunchUriAsync(uri, options);
if (success)
{
// URI launched: uri.AbsoluteUri
}
else
{
// URI launch failed. uri.AbsoluteUri
}