我正在尝试使用C#集成不同的文件和指向Cortana语音命令的链接。当我在Cortana语音命令应用程序文件夹中复制这些特定文件但我无法启动* .exe文件(复制在同一文件夹中)时,大多数应用程序都正常工作。即使在以管理员身份启动VS之后,我得到的常见错误是访问被拒绝。我附上了代码行以及错误屏幕截图。
{"Abrir NAV", (Action)(async () => {
StorageFile file = await Package.Current.InstalledLocation.GetFileAsync(@"Microsoft.Dynamics.Nav.Client.exe");
await Launcher.LaunchFileAsync(file);
})
},
答案 0 :(得分:0)
您无法直接从UWP应用启动可执行文件。
MSDN文档提到了这一点:此API还对可以启动的文件类型施加了一些限制。许多包含可执行代码的文件类型(例如.exe,.msi和.js文件)都被阻止启动。此限制可保护用户免受可能修改系统的潜在恶意文件的侵害。来自launcher文档。
根据您的描述,您的“.exe”文件包含在您的UWP项目中。因此,您可以使用FullTrustProcessLauncher.LaunchFullTrustProcessForCurrentAppAsync()方法从同一应用程序包中的通用Windows应用程序组件激活应用程序的完全信任的Win32组件。
请注意“完全信任”的概念。您需要在“Package.appxmanifest”中为“.exe”文件声明“完全信任”。例如:
<Package
xmlns="http://schemas.microsoft.com/appx/manifest/foundation/windows10"
xmlns:mp="http://schemas.microsoft.com/appx/2014/phone/manifest"
xmlns:uap="http://schemas.microsoft.com/appx/manifest/uap/windows10"
xmlns:rescap= "http://schemas.microsoft.com/appx/manifest/foundation/windows10/restrictedcapabilities"
xmlns:desktop="http://schemas.microsoft.com/appx/manifest/desktop/windows10"
IgnorableNamespaces="uap mp rescap desktop">
<Applications>
<Application>
...
<Extensions>
<desktop:Extension Category="windows.fullTrustProcess" Executable="MyFiles\ConsoleApp1.exe"/>
</Extensions>
</Application>
</Applications>
<Capabilities>
<rescap:Capability Name="runFullTrust"/>
</Capabilities>
</Package>
然后,在代码中,您可以调用此方法来启动该“.exe”文件。
await FullTrustProcessLauncher.LaunchFullTrustProcessForCurrentAppAsync();