web-dev-qa-db-ja.com

UWPを使用してC#からEXEを実行する

私は検索して検索しましたが、ここでレンガの壁にぶつかったようです。オーディオ指紋を生成してオーディオデータベースを自動的に検索し、正しいアーティストとタイトルを取得して、それに応じてファイルの名前を変更するアプリケーションを開発しています。

私の問題は、音響指紋を生成できるC#およびUWP(私が知っていることから)でサポートされているライブラリがないことです。私が見つけた唯一のものは、「fpcalc.exe mymp3file.mp3> generatefingerprint.txt」などのコマンドを実行して、指紋をテキストファイルに取り込むことができるChromaprintです。

指紋を取得することはここでは実際には問題ではないことがわかりますが、問題は、従来の方法(Winformsアプリケーションで使用される方法など)を使用してUWPアプリケーション内からEXEファイルを実行できないことです。 UWPからファイルを実行するため、アプリケーション内からフィンガープリントを生成できません。

だから私の質問は、誰かがこれに対する回避策を持っていますか? XboxOneがPowerShellをサポートしていることを考えると、Powershellを使用できる可能性があることは理解していますが、次のコードを使用すると次のようになります。

using (PowerShell PowerShellInstance = PowerShell.Create())
{
    PowerShellInstance.AddCommand(".\fpcalc.exe " + file.Path + " > out.txt");
}

ビルド時に次のエラーが発生します。

Cannot find type System.SystemException in module CommonLanguageRuntimeLibrary

それで、誰かが私のアプリケーション内からこのfpcalc.exeファイルを起動するために私が何ができるかについて何か考えがありますか?アプリケーションがWindowsPCとデスクトップのみをサポートしているかどうかは実際には気にしませんが、最終的なアプリケーションはWACKに合格し、Microsoftストア(ところで無料でダウンロードできます)で許可される必要があります。

助けてくれてありがとう:)

11
user3733885

私はこれを一晩中レンガの壁に頭をぶつけてきましたが、何百ページもオンラインにした後、私の問題の解決策を思いついたかもしれません。

[参照]> [ユニバーサルWindows]> [拡張機能]の[UWPv10.0.14393.0のWindowsデスクトップ拡張機能]を参照すると、次のことができます。

await FullTrustProcessLauncher.LaunchFullTrustProcessForCurrentAppAsync();

LaunchFullTrustProcessを使用すると、自分のアプリケーション内から信頼できるアプリケーションを起動できます。次に、パッケージマニフェストXMLファイルを変更し、「機能」の下に以下を追加しました。

<rescap:Capability
  xmlns:rescap="http://schemas.Microsoft.com/appx/manifest/foundation/windows10/restrictedcapabilities"
  Name="runFullTrust" />

次に、XMLの「アプリケーション」に以下を追加しました

<Extensions
  xmlns:desktop="http://schemas.Microsoft.com/appx/manifest/desktop/windows10">
    <desktop:Extension
      Category="windows.fullTrustProcess"
      Executable="fpcalc.exe" />
</Extensions>

次に、依存関係を変更して、アプリケーションをWindowsデスクトップマシンで実行できるようにしました。

<Dependencies>
    <TargetDeviceFamily Name="Windows.Desktop" MinVersion="10.0.14393.0" MaxVersionTested="10.0.14393.0" />
</Dependencies>

その後、アプリケーションを起動することができました。コードを書き終えたら、それをテストし、将来の参照のために問題の正しい解決策を投稿します。

17
user3733885