12

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

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

因此,正如您所看到的,在这里抓取指纹并不是真正的问题,问题是我无法使用传统方法(例如在 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 文件吗?我实际上并不介意该应用程序是否仅支持 Windows PC 和台式机,但最终的应用程序必须能够通过 WACK 并被允许在 Microsoft Store 上使用(顺便说一句,它可以免费下载)。

在此先感谢您的帮助:)

4

1 回答 1

20

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

通过引用“参考 > 通用 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>

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

于 2017-03-20T12:33:14.813 回答