web-dev-qa-db-ja.com

ユニバーサルWindowsプラットフォーム(UWP)アプリを使用してプロセスコマンド(または同様のコマンド)を実行する方法

カスタムCortanaコマンドの作成に取り組んでいます。コマンドは、ユニバーサルWindowsプラットフォームアプリケーションを使用して登録および実行されます。 (GitHub)

たとえば、私は次のコマンドを登録しました

<Command Name="ShutDown">      
  <ListenFor>Shut down</ListenFor>
  <Navigate/>    
</Command>

UWPアプリケーションでこの関数を実行するには

static async void ShutDown()
{
    var dialog = new MessageDialog("This is where I would shut the computer down.");
    await dialog.ShowAsync();
    //System.Diagnostics.Process.Start("Shutdown", "-s -t 10");
}

しかし、これを設定した後、System.Diagnostics.ProcessはUWPではサポートされていません。

実行するカスタムコマンドには、外部プログラムの起動、他のスクリプトの実行、Webサイトのオープンなど、何らかの実行が含まれます。

UWPはユニバーサルであり、XBoxまたは電話ではこれらを実行できない可能性があるため、UWPがそれらをサポートしていないことは理にかなっていますが、Windows 10 PCでこれを実現する代替手段またはハッキング方法があることを望んでいました。

UWPアプリケーションでProcessコマンドなどの機能を実行する方法はありますか? CortanaにC#コードを実行させることができたとしても、UWPはこの状況で役立つ多くの機能をサポートしていないようです。

前もって感謝します。

25
Charles Clayton

同様の動作を実現する方法は限られています。

  1. LaunchUriを使用して、特定のURIスキームに登録された他のアプリをトリガーできます。これは、Webブラウザーのシナリオで機能するはずです。詳細はこちら: https://msdn.Microsoft.com/en-us/library/windows/apps/windows.system.launcher.launchuriasync.aspx

  2. LaunchForResultsを使用して、別のアプリをトリガーし、そのアプリから結果を取得できます。呼び出されたアプリはこれをサポートする必要があります。詳細はこちら: https://msdn.Microsoft.com/en-us/library/windows/apps/mt269386.aspx

  3. 別のアプリが提供するApp Servicesをトリガーできます。呼び出されたアプリはこれをサポートする必要があります。アプリサービスはバックグラウンドで実行されます。 (これはかなりクールだと思います。)詳細はこちら: http://blogs.msdn.com/b/mvpawardprogram/archive/2015/06/11/writing-windows-10-app-services-in -javascript.aspx

  4. これは少しハックです。これがまだ機能するかどうかはわかりませんが、Windows 8.1では機能しました。いわゆる「ブローカーコンポーネント」を作成できます。これにより、マシン上のアプリからすべてをトリガーできますが、ブローカーコンポーネントをストアに公開することはできません。これにより、Windows 8.1でProcess.Start()も許可されました。サイドローディングされたアプリでのみ機能しました。 Windows 10でも動作するかどうかはわかりません。詳細はこちら: https://msdn.Microsoft.com/en-us/library/windows/apps/dn630195.aspx

概要:ターゲットアプリがアプリサービスとして登録されているか、プロトコルハンドラー(Uriスキーム)を登録している限り、別のアプリの起動は非常に簡単です。オプション4が機能しなくなった場合、スクリプトまたは他の* .exeを起動することはできません。

19
Daniel Meixner

Windows 10 Anniversary Update(1607)では、PCでこのシナリオを有効にするオプションがあります。 Desktop Extension SDKのこのAPIを使用すると、完全なユーザー特権で実行されるfulltrustプロセスを起動できます。

https://docs.Microsoft.com/en-us/uwp/api/Windows.ApplicationModel.FullTrustProcessLauncher

これにより、サポートされているプラ​​ットフォーム、つまり1607以降を実行しているPCで点灯させることができます。そして、あなたのアプリはまだ普遍的です:

if (ApiInformation.IsApiContractPresent("Windows.ApplicationModel.FullTrustAppContract", 1, 0))
{
    await FullTrustProcessLauncher.LaunchFullTrustProcessForCurrentAppAsync();
}
9