【问题标题】:Running an EXE from C# using UWP使用 UWP 从 C# 运行 EXE
【发布时间】:2017-08-11 13:06:50
【问题描述】:

我找了又找,似乎在这里撞到了一堵砖墙。我正在开发一个生成音频指纹的应用程序,以自动搜索音频数据库以获取正确的艺术家和标题并相应地重命名文件。

我的问题是,没有支持的 C# 和 UWP 库(据我所知)可以生成声学指纹。我发现的唯一东西是 Chromaprint,它允许我运行诸如“fpcalc.exe mymp3file.mp3 > generatedfingerprint.txt”之类的命令并将指纹抓取到文本文件中。

因此,正如您所见,抓取指纹并不是真正的问题,问题是我无法使用传统方法(例如 Winforms 应用程序中使用的方法)从 UWP 应用程序中运行 EXE 文件。我也无法启动命令提示符从 UWP 执行文件,所以我无法从我的应用程序中生成指纹。

所以我的问题是,是否有人对此有任何解决方法。我知道我可以使用 Powershell,因为 XboxOne 支持 PowerShell,但是如果我使用以下代码:

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

构建时出现以下错误:

Cannot find type System.SystemException in module CommonLanguageRuntimeLibrary

那么有没有人知道我可以做些什么来从我的应用程序中启动这个 fpcalc.exe 文件?我实际上并不介意该应用程序是否仅支持 Windows PC 和台式机,但最终的应用程序必须能够通过 WACK 并被允许在 Microsoft Store 上使用(顺便说一句,可以免费下载)。

提前感谢您的帮助:)

【问题讨论】:

    标签: c# windows powershell uwp-xaml wack


    【解决方案1】:

    为此,我整晚都在用头撞砖墙,但是在网上看了数百页之后,我可能已经想出了解决问题的方法。

    通过引用“参考 > 通用 Windows > 扩展”下的“UWP v10.0.14393.0 的 Windows 桌面扩展”,我可以使用:

    await FullTrustProcessLauncher.LaunchFullTrustProcessForCurrentAppAsync();
    

    LaunchFullTrustProcess 允许我从自己的应用程序中启动受信任的应用程序。然后我修改了 Package Manifest 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>
    

    然后我就可以启动应用程序了。完成代码编写后,我将对其进行测试并发布问题的正确解决方案以供将来参考。

    【讨论】:

    • 如果可能的话,您能否发布完整的解决方案? :)
    • @user3733885,我如何添加多个 与 Category="windows.fullTrustProcess" 以防我需要为适当的功能执行单个 exe 以及如何识别它们中的每一个以调用代码。当我尝试使用 category = fullTrestProcess 添加多个 时,我收到此错误:具有 Category 属性值“windows.fullTrustProcess”的 Extension 元素只能声明一次。你能帮我吗,谢谢。
    • 我已经使用在后台运行的代理应用程序完成此操作,等待来自 UWP 应用程序的命令。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-03-26
    • 1970-01-01
    • 1970-01-01
    • 2017-12-03
    • 1970-01-01
    • 2019-12-25
    • 2018-05-02
    相关资源
    最近更新 更多