Подтвердить что ты не робот

Регистрация обработчика протокола в 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, поэтому добавление записи в манифест не будет работать для меня.

4b9b3361

Ответ 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

    }