无法再启动16位应用程序

时间:2010-05-05 23:37:03

标签: winapi shellexecute createprocess ntvdm.exe 16-bit

我正在尝试使用编写C ++的Win32宏应用程序来调试和解决一些问题但是我遇到了最棘手的问题。

我必须启动一个16位程序,然后模拟输入数据并且已经使用ShellExecute超过两年了。我根本没有碰过这个实际的代码,但现在它不起作用。

我在做ShellExecute(NULL, "open", exe_path.c_str(), NULL, "", SW_SHOWDEFAULT);。这种情况多年来一直运作良好,但突然之间,它停止了工作。它给了我一个ACCESS_DENIED错误代码。我用Google搜索,显然这是推出16位应用程序的一个非常常见的问题。

工作站XP SP2环境根本没有改变,它实际上正在工作,直到我很久以前重建(我多次重建它)。

代码在窗口过程函数内部,当我把它取出并在WinMain函数中启动程序时它可以工作,但是代码必须在窗口过程中......

我尝试了很多替代方案,但他们都提出了同样的问题。

最大的问题是它正在运行然后突然决定它不会对代码和环境没有任何改变!事实上,它大约是测试的一半它认为它会停止工作的变化。

请帮助,因为如果没有程序启动我就无法做任何事情。这是我正在调试的代码中的第一步!

1 个答案:

答案 0 :(得分:1)

我发现了这个问题。我使用lpDirectory函数将NULL参数(我提供的""PathRemoveFileSpec())更改为可执行文件的目录。

该应用程序再次启动。 现在我可以继续修复程序的 rest