2012-11-26 9 views
12

私はリンクのオープンを扱うアプリケーションを登録しようとしています(e、g、http://stackoverflow.com)。私はWindows 8のためにこれを明示的に行う必要があります。私は以前のバージョンのWindowsでitworkingしています。 MSDNによれば、Win8ではこれが変更されています。Windows 8でプロトコルハンドラを登録する

MSDNのMSDN(msdn.microsoft.com/en-us/library/cc144154.aspx)ページの[既定のプログラム]ページを使いました。これは、ファイルタイプを扱う上での大きなウォークスルーを提供しますが、プロトコルの細部については軽いです。 Registering an Application to a URL Protocolは、新しいプロトコルの設定に関わる手順だけを実行しますが、既存のプロトコルに新しいハンドラを正しく追加する方法は扱いません。

他のSOの投稿に記載されているレジストリ設定も試しました。

もう1つのことは、アプリケーションがMetro/Windowsストアアプリケーションではないため、マニフェストにエントリを追加することはできません。

答えて

-4

LaunchUriAsync(ウリ)

は、指定された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 

    } 
+5

この詳細はvia経由でURIを起動する方法です。私がしようとしているのは、別のアプリがこのようなURIを起動したときに起動されるようにアプリケーションを登録することです。 – Josh

11

あなたは既定のプログラムのWebページで正しい軌道に乗っていた - 実際には、それはこの記事のための私の参照です。

以下はその一例を適応:

まず、あなたは(あなたがすでに存在していてもよい)、それに与えられたすべての入力を処理する方法を指示HKLM\SOFTWARE\ClassesProgIDが必要になります。

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キー内部DefaultProgram情報で:

HKLM\SOFTWARE\MyApp 
    Capabilities 
     ApplicationDescription 
      URLAssociations 
       myprotocol = MyApp.ProtocolHandler //Associated with your ProgID 

最後に、wは、アプリケーションの機能を登録しますi番目のDefaultPrograms:

HKLM\SOFTWARE 
     RegisteredApplications 
     MyApplication = HKLM\SOFTWARE\MyApp\Capabilities 

今すぐすべての "myprotocol:" リンクは%ProgramFiles%\MyApp\MyApp.exe %1をトリガする必要があります。

+0

これは非常に新しい概念です。あなたは上記のコードを実行する方法を教えてくださいできますか? – jammy

+0

コードではありません。 Windowsレジストリにアクセスする際には、読んでおく必要があります。コードスニペットはレジストリ内のキーと値です。 –

+0

あなたのプロトコルが定義されているかどうかわからない場合は、あなたはまだこのようにそれを追加する必要があります。 '[HKEY_CLASSES_ROOTの\のmyprotocol] (デフォルト)= "URL:myprotocol" "URLプロトコル"= ""' – Daniel

3

サイドノート、これはこの種の問題をグーグルときに見つかったトップの答えであることから: は、シェルコマンドのオープンでのパスは、アプリケーションへの適切なパスであることを確認してください。 私は、ChromeとEdge on Windows 10にのみ影響を与えたような一日のデバッグ問題を抱えていました。 問題点は何ですか?使用された.batファイルへのパスは、 と\とスラッシュが混在しています。 パスに適切なスラッシュのみを使用して、Edge & Chromeが突然要求を受け取ることができました。

+0

ありがとう!一般的に、このようなことはコメントのために保存する必要があります。 – Arithmomaniac

+0

これは解答そのものではないので、これは受け入れられた解答のコメントでなければなりません。 – MrTux

関連する問題