Запуск 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>
Затем я смог запустить приложение. Как только я закончу писать код, я протестирую его и опубликую правильное решение проблемы для дальнейшего использования.