Запуск EXE из C# с использованием UWP

Я искал и искал и, кажется, ударил кирпичную стену здесь. Я разрабатываю приложение, которое генерирует аудио-отпечаток для автоматического поиска в базе данных аудио, чтобы выбрать правильного исполнителя и название и соответственно переименовать файлы.

Моя проблема в том, что нет поддерживаемых библиотек для C# и UWP (из того, что я знаю), которые могут генерировать акустический отпечаток. Единственное, что я нашел, - это Chromaprint, который позволяет мне запускать команду, такую ​​как "fpcalc.exe mymp3file.mp3 > generatefingerprint.txt", и захватывать отпечаток в текстовый файл.

Таким образом, как вы видите, захват отпечатка пальца на самом деле не проблема, проблема в том, что я не могу запустить EXE-файл из приложения UWP с использованием традиционных методов (таких как те, которые используются в приложении Winforms. Я также не могу запустить командную строку для выполнить файл из 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, но конечное приложение должно иметь возможность проходить WACK и быть разрешенным в Магазине Microsoft (который будет бесплатным для загрузки BTW).

Заранее благодарю за любую помощь:)

1 ответ

Решение

Я всю ночь бился головой об кирпичную стену, но после сотен страниц в Интернете я, возможно, нашел решение своей проблемы.

Ссылаясь на "Расширения рабочего стола Windows для UWP v10.0.14393.0" в разделе "Ссылки"> "Универсальные Windows > Расширения", я могу использовать:

await FullTrustProcessLauncher.LaunchFullTrustProcessForCurrentAppAsync();

LaunchFullTrustProcess позволяет мне запускать доверенное приложение из моего собственного приложения. Затем я изменил XML-файл Package Manifest и добавил следующее в разделе "Возможности".

<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>

Затем я смог запустить приложение. Как только я закончу писать код, я протестирую его и опубликую правильное решение проблемы для дальнейшего использования.

Другие вопросы по тегам