UWP LaunchFullTrustProcessForCurrentAppAsync - EXE-файл не найден - PullRequest
0 голосов
/ 14 февраля 2019

Мы создаем приложение UWP, которое предназначено только для боковой загрузки.В разное время это приложение должно перезагружать ПК (только для настольных компьютеров), для этого мы намереваемся использовать LaunchFullTrustProcessForCurrentAppAsync () для вызова простого внешнего EXE-файла, который использует Process.Start («завершение работы») для перезагрузки ПК.

Мы создали EXE-файл под названием RebootPC.exe, и он сам по себе работает нормально.

Теперь мы включили его в наш проект UWP:

Сначала мы добавим пространства имен рабочего стола и переназначим внаш проект, и мы также добавляем rescap в наши IgnorableNamspaces

xmlns:desktop="http://schemas.microsoft.com/appx/manifest/desktop/windows10" 
     xmlns:rescap="http://schemas.microsoft.com/appx/manifest/foundation/windows10/restrictedcapabilities" 
     IgnorableNamespaces="uap mp uap5 rescap">

Затем мы изменяем раздел Extension, чтобы включить наш EXE, мы знаем, что не можем поместить EXE в наш корень проекта, так как компилятор C # удаляет его, поэтому мыположить его в подпапку (в данном случае \ Assets).Мы также устанавливаем тип EXE в «Содержимое» и «Всегда копировать» в обозревателе решений

<desktop:Extension Category="windows.fullTrustProcess" Executable="Assets\RebootPC.exe">
      <desktop:FullTrustProcess>
        <desktop:ParameterGroup GroupId="rebooter" Parameters=""/>
      </desktop:FullTrustProcess>
    </desktop:Extension>

, наконец, в манифесте мы добавляем rescap в раздел «Возможности» - мы знаем, что он должен быть первым в спискев противном случае вы получаете ошибку манифеста при упаковке

<Capabilities>
<rescap:Capability Name="runFullTrust"/>
<Capability Name="internetClient" />
<DeviceCapability Name="bluetooth" />
<DeviceCapability Name="radios" />

OK, поэтому манифест изменяется.Теперь мы переходим к нашему C # -коду:

. В этом мы выполняем следующее:

if (ApiInformation.IsApiContractPresent("Windows.ApplicationModel.FullTrustAppContract", 1, 0))
            {
                try
                {
                    await Windows.ApplicationModel.FullTrustProcessLauncher.LaunchFullTrustProcessForCurrentAppAsync();

                }
                catch (Exception ex)
                {
                    Debug.WriteLine(ex.Message);
                }

            }

Когда мы собираем и запускаем проект в Visual Studio, кажется, что он работает нормально, в предполагаемых обстоятельствахПК будет перезагружен по назначению.

Проблема возникает, когда мы пытаемся упаковать его для установки на другие ПК.Мы используем Store-> Create App Packages (помните, что это приложение только для боковой загрузки).

Создание пакета работает нормально, и мы можем без проблем установить его на другие ПК.Проблема в том, что когда мы запускаем приложение, и приходит время запустить внешний EXE для перезагрузки ПК, открывается окно командной строки, но мы получаем исключение, говорящее «Система не может найти c: \ users ....... \Assets \ RebootPC.exe "

Итак, хотя упаковка выполняется без ошибок, и хотя мы установили свойства RebootPC.exe в« Содержимое »и« Копировать всегда », они либо не включены впакет или не устанавливается вместе с приложением?

Итак, кто-нибудь знает, как мы можем проверить, входит ли он в пакет?и если да, то как мы можем проверить, если и где он устанавливается на целевой машине?или кто-то еще имел эту проблему и нашел решение?

Это нас несколько дней сбивало с толку и сводило нас с ума !!!

ОБНОВЛЕНИЕ: Я думаю, что проблема не в том, что RebootPC.exe не может быть найден, а shutdown.exe - если это так, то это ошибка школьника!В любом случае, я расскажу это и посмотрю, решит ли это проблему

. Оставлю остальную часть вопроса, поскольку она может предоставить полезную информацию для других

1 Ответ

0 голосов
/ 15 февраля 2019

Как уже упоминалось в официальном примере, exe-файл должен находиться в папке Appx вашего проекта

Убедитесь, что RebootPC.exe был скопирован в папку Appx - UWP \ bin \ x64 \ Release\ AppX, если не перестроить решение или скопировать его вручную.

https://github.com/Microsoft/DesktopBridgeToUWP-Samples/tree/master/Samples/AppServiceBridgeSample#builddeploy-and-run-the-sample

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...