在UWP应用程序中由URI启动的应用程序是否也是沙箱?

时间:2018-02-13 16:07:59

标签: c# uwp windows-10 win-universal-app windows-10-universal

我继承了一个UWP应用程序,并被要求添加一个按钮来启动第三方应用程序。第三方应用程序是使用Qt构建的,并且有一个exe作为主程序,它启动第二个作为服务的exe。 UWP应用程序将在运行Windows 10的平板电脑上运行。

我创建了一个安装程序,为第三方应用程序的URI添加了注册表值,因此我可以进行URI激活(LaunchUriAsync方法)。如果我将URI的目标更改为其他应用程序,它可以正常工作,因此我知道URI设置正确。

当我点击按钮时,第三方应用程序无法打开。我使用ProcMon来查看发生了什么,并确认它开始打开但在启动第二个exe之前停止。没有任何内容写入事件日志,因为这样做太有用了。

我没有找到任何关于此的文档,但我必须假设从UWP应用程序启动的应用程序也是沙箱。有谁知道这是否正确?我不知道除了将应用程序重建为WPF之外还要做什么,这不是很吸引人。

2 个答案:

答案 0 :(得分:1)

你的问题的答案是:不,他们没有被沙箱运行。

启动一个通过协议从UWP以全信任方式运行的应用程序是受支持的方案(例如,如果Outlook是您的默认mailto:提供程序,那就是组合电子邮件的工作原理。)

我怀疑你的协议注册中缺少了什么,或者你是如何调用它的,但问题中没有足够的细节来解决这个问题。

答案 1 :(得分:0)

我能够通过为UWP创建一个新的控制台应用程序来启动我的第三方应用程序,然后为它启动一个新的进程。

控制台应用就是这样:

var proc = new Process(); 
proc.StartInfo.FileName = filePath; 
proc.StartInfo.WorkingDirectory = Path.GetDirectoryName(filePath); 
proc.Start(); 
proc.WaitForExit(); 
var exitCode = proc.ExitCode; 
proc.Close(); 

" WorkingDirectory"是必需的,从UWP我没有看到一种方法来设置它。