C# - 用于启动外部应用程序的Cortana语音命令

时间:2017-11-02 13:11:52

标签: c# windows-10 windows-10-universal cortana

我正在尝试使用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);
        })
},

Cortana Error

1 个答案:

答案 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>

enter image description here

然后,在代码中,您可以调用此方法来启动该“.exe”文件。

await FullTrustProcessLauncher.LaunchFullTrustProcessForCurrentAppAsync();