【发布时间】:2010-05-05 23:37:02
【问题描述】:
我正在尝试调试和解决用 C++ 编写的 Win32 宏应用程序的一些问题,但是我遇到了最奇怪的问题。
我必须启动一个 16 位程序,然后模拟输入数据,并且已经使用 ShellExecute 两年多了。我根本没有接触过这个实际的代码,但现在它不起作用了。
我正在做ShellExecute(NULL, "open", exe_path.c_str(), NULL, "", SW_SHOWDEFAULT);。这多年来一直完美无缺,但突然之间,它停止了工作。它给了我一个 ACCESS_DENIED 错误代码。我在 Google 上搜索过,显然这是启动 16 位应用程序时很常见的问题。
工作站 XP SP2 环境根本没有改变,它实际上一直在工作,直到我不久前重建(我之前已经重建过很多次)。
代码在窗口过程函数中,当我将其取出并在 WinMain 函数中启动程序时它可以工作,但代码必须在窗口过程中......
我尝试了许多替代方案,但它们都给出了相同的问题。
最大的问题是 它正在工作,然后突然决定它不会在不改变代码和环境的情况下运行!事实上,它已经完成了大约一半的测试它认为它会停止工作的更改。
请帮助,因为如果没有启动程序,我将无法做任何事情。这是我正在调试的代码的第一步!
【问题讨论】:
-
谁投票决定将此迁移到超级用户?这绝对是一个编程问题,属于 stackoverflow。
-
在启动程序时尝试使用 Process Monitor 记录所有内容。
-
谢谢 Zian,我会看看它告诉我什么。是的,这绝对是一个编程问题。我的 Win32 代码 不再工作了。
-
进程监视器并没有真正给我任何东西。它甚至不启动(ntvdm.exe 和 16 位应用程序本身)。
-
谷歌搜索 schrodenbug。
标签: winapi shellexecute createprocess ntvdm.exe 16-bit