我们正在创建仅用于侧面加载的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-如果是这种情况,则可能是一个男生错误! 无论如何,我将对此进行排序,看看是否可以解决问题
我将保留其余的问题,因为它可能会为其他人提供有用的信息
答案 0 :(得分:0)
如官方示例中所述,exe文件必须位于项目的Appx文件夹中
确保RebootPC.exe已复制到Appx文件夹- UWP \ bin \ x64 \ Release \ AppX(如果不重建或复制解决方案) 手动。