在我关闭它们后,通用对话控件似乎可以让我的程序继续运行

Posted

技术标签:

【中文标题】在我关闭它们后,通用对话控件似乎可以让我的程序继续运行【英文标题】:Common dialogue control seems to keep my programs running after I close them 【发布时间】:2018-10-19 18:50:10 【问题描述】:

我目前运行的是 64 位 Windows 10 开发盒。我有旧的 VB6 源代码,不幸的是我暂时必须保持更新。出于某种原因,我突然注意到我刚刚构建的其中一个应用程序在关闭 GUI 后似乎仍在后台运行。

我开始越来越多地调试这个问题,直到我发现它似乎在关闭 GUI 后在后台持续保持打开状态的唯一一次是如果我单击了我的表单上将调用通用对话框控件的按钮显示文件打开 GUI。我只需要显示文件打开窗口,然后点击取消即可。

这似乎只发生在我的一台开发机器上(而不是另一台)。每次我使用该 CD 文件打开框时,我都必须打开任务管理器并结束任务。当我的主表单开始卸载时,我还尝试确保所有表单都已关闭。似乎没有任何作用或对问题所在提供任何线索。我还仔细检查了以下文件现在是否都相同,将它们从已知的工作开发机器复制到我损坏的机器并重新注册它们。

COMDLG32.OCX comdlg32.oca comdlg32.dll COMDLG32.DEP

两台机器都运行完全相同的操作系统 Win10 Pro 64bit。

【问题讨论】:

两个系统上运行的 Windows Explorer 扩展可能不同吗? @PeterCooperJr。是的,两台机器都非常不同,但是什么会导致使用通用对话框窗口的应用程序无法关闭? @ArvoBowen 这不是“使用通用对话框的应用程序”,而是您正在测试的大量遗留应用程序。只需从一个空项目开始,放置 comdlg 和一个按钮,然后在显示打开文件对话框后测试应用程序是否正在关闭。如果还是不行,那么目标操作系统有问题,而不是你的旧应用本身有问题。 听起来有些东西,可能是该文件夹中的外壳扩展或程序中的逻辑路径,对您的程序有引用。 COM 规则是在引用计数为零之前不能退出。 【参考方案1】:

这听起来确实很奇怪,在两台机器上得到不同的结果。务实地,您可以通过确保执行 End 语句来解决问题(无需真正理解它)。 (您可以将它放在 QueryUnload 事件中,以确保在用户单击“X”时它会被命中。)

【讨论】:

首先想到的是 hack……即使是那种糟糕的代码习惯也行不通。我在 QueryUnload 子中有它,它没有效果。 PS:我已经放弃尝试理解 VB6 10 多年了。它有时会为所欲为......而且不稳定...... Gezz!

以上是关于在我关闭它们后,通用对话控件似乎可以让我的程序继续运行的主要内容,如果未能解决你的问题,请参考以下文章

断开发送方投射设备后,如何让我的 android 电视应用程序继续运行?

qt弹出消息框程序继续运行

MFC对话框加上PNG图片后,图片上的控件可以设置透明吗?

VS 继续调试会话意味着内存泄漏,关闭应用程序后?

即使在应用程序被杀死后如何继续进行 iOS 位置跟踪?

VS2010 用MFC文件对话框添加电脑图片显示到图片控件,如何再次点击按钮来继续添加第二张图片呢?