UWP LaunchFullTrustProcessForCurrentAppAsync-找不到EXE文件

时间:2019-02-14 09:08:23

标签: c# uwp

我们正在创建仅用于侧面加载的UWP应用程序。 在不同的时间,此应用程序需要重新启动PC(仅限台式机),为此,我们打算使用LaunchFullTrustProcessForCurrentAppAsync()调用一个简单的外部EXE,该外部EXE使用Process.Start(“ shutdown”)来重新启动PC。

我们创建了一个名为RebootPC.exe的EXE,它本身运行正常。

我们现在将其包含在我们的UWP项目中:

首先,我们将桌面和rescap命名空间添加到我们的项目中,并且还将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">

然后,我们然后修改扩展部分以包含我们的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" />

确定,清单已更改。现在,我们转到C#代码:

我们执行以下操作:

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

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

            }

当我们在Visual Studio中构建和运行项目时,它似乎可以正常运行,在预期的情况下,PC将按预期的方式重新启动。

当我们尝试将其打包以安装在其他PC上时出现问题。我们使用Store-> Create App Packages(请记住此应用程序仅用于侧面加载)。

创建软件包的工作正常,我们可以毫无问题地将其安装在其他PC上。问题是,当我们运行应用程序并且需要运行外部EXE来重启PC时,将打开一个命令窗口,但出现一个异常,提示“系统找不到c:\ users ....... \ Assets \ RebootPC.exe”

因此,即使打包过程没有错误,并且即使我们将RebootPC.exe的属性设置为“ Content”和“ Copy Always”,它也未包含在软件包中或未与软件包一起安装应用程序?

那么,有谁知道我们如何检查包装中是否包含它?如果可以,我们如何检查目标计算机上是否安装了它,以及在哪里安装了它?还是其他人遇到了这个问题并找到了解决方案?

这使我们困惑了好几天,并且使我们发疯了!!!

更新:我认为问题可能不在于找不到RebootPC.exe,而在于shutdown.exe-如果是这种情况,则可能是一个男生错误! 无论如何,我将对此进行排序,看看是否可以解决问题

我将保留其余的问题,因为它可能会为其他人提供有用的信息

1 个答案:

答案 0 :(得分:0)

如官方示例中所述,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