首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如果应用是Microsoft应用,则无法等待退出

如果应用是Microsoft应用,则无法等待退出
EN

Stack Overflow用户
提问于 2019-02-16 06:33:49
回答 1查看 81关注 0票数 0

我正在开发一个应用程序,这是打开一个文件与相关的应用程序的文件扩展名(这部分是由shellexecute提供的),等待它退出,然后继续处理文件。我知道Process.Start(...)可能会返回null,例如,如果有相同的进程正在运行,等等。我通过要求用户在继续之前关闭默认应用程序的所有窗口来解决它。我正在从FindExecutable(...)获取关联的.exe路径从shell32.dll导入,然后在循环中调用this,并检查list lenght是否为0。

代码语言:javascript
运行
复制
var processList = new List<Process>(Process.GetProcessesByName(Path.GetFileNameWithoutExtension(defaultExecutablePath)));

在这里,我遇到了一堵我无法克服的墙。如果默认应用程序是微软的任何类型的应用程序(边缘,照片,电影) FindExecutable(...)返回空字符串。但是Process.Start(...)以某种方式启动正确的默认应用程序,例如Microsoft Edge (用于.pdf),但即使没有Microsoft Edge的实例正在运行,它也会返回null,因此我无法等待新创建的进程退出。这一切都很好,但有一个例外,如果应用程序是由微软提供的。

代码语言:javascript
运行
复制
            var newProcess = Process.Start(openPath);
            if(newProcess == null)
            {
                throw new ProcessStartNullException();
            }else
            {
                newProcess.WaitForExit();
            }

我可以以某种方式利用它或重新设计等待退出吗?

EN

Stack Overflow用户

回答已采纳

发布于 2019-02-16 09:38:19

这并不是因为它们是微软的ApplicationFrameHost,而是因为它们是UWP,而UWP运行在一个名为ApplicationFrameHost的容器进程中,所以您需要找出该UWP下的实际进程,然后对其进行监控。此外,许多Win 10 UWP应用程序的进程不会在用户关闭窗口后立即终止,因此他们可以有一个热启动,而不是冷启动,以获得更好的性能。它将首先挂起应用程序,然后在需要时终止它。因此,即使您可以找到真实的进程,您也不能总是依靠它来确定UWP窗口是否关闭。

票数 0
EN
查看全部 1 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54717918

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档