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

Are apps launched by URI in a UWP app also sandboxed?

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

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

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

我没有找到任何关于此的文档,但我必须假设从 UWP 应用程序启动的应用程序也被沙盒化了。有谁知道这是否正确?除了将应用程序重建为 WPF 或其他东西之外,我不确定该怎么做,这不是很有吸引力。

您的问题的答案是:不,它们没有被 运行 沙盒化。

通过协议从 UWP 启动 运行 完全信任的应用程序是一种受支持的方案(例如,如果 Outlook 是您的默认 mailto: 提供商,这就是撰写电子邮件的方式)。

我怀疑您的协议注册或调用方式中缺少某些内容,但问题中没有足够的详细信息来解决此问题。

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

控制台应用就是这样:

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 我看不到设置它的方法。