我继承了一个UWP应用程序,并被要求添加一个按钮来启动第三方应用程序。第三方应用程序是使用Qt构建的,并且有一个exe作为主程序,它启动第二个作为服务的exe。 UWP应用程序将在运行Windows 10的平板电脑上运行。
我创建了一个安装程序,为第三方应用程序的URI添加了注册表值,因此我可以进行URI激活(LaunchUriAsync方法)。如果我将URI的目标更改为其他应用程序,它可以正常工作,因此我知道URI设置正确。
当我点击按钮时,第三方应用程序无法打开。我使用ProcMon来查看发生了什么,并确认它开始打开但在启动第二个exe之前停止。没有任何内容写入事件日志,因为这样做太有用了。
我没有找到任何关于此的文档,但我必须假设从UWP应用程序启动的应用程序也是沙箱。有谁知道这是否正确?我不知道除了将应用程序重建为WPF之外还要做什么,这不是很吸引人。
答案 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我没有看到一种方法来设置它。