Winapi 无法再启动16位应用程序 我试图用C++编写的Win32宏应用程序调试和解决一些问题,但是我遇到了最奇怪的问题。

Winapi 无法再启动16位应用程序 我试图用C++编写的Win32宏应用程序调试和解决一些问题,但是我遇到了最奇怪的问题。,winapi,shellexecute,createprocess,ntvdm.exe,16-bit,Winapi,Shellexecute,Createprocess,Ntvdm.exe,16 Bit,我必须启动一个16位程序,然后模拟将数据输入到ShellExecute中,并且已经使用ShellExecute两年多了。我根本没有接触过这个实际的代码,但现在它不工作了 我正在执行ShellExecute(NULL,“open”,exe_path.c_str(),NULL,”,SW_SHOWDEFAULT)。多年来,这项技术一直运转良好,但突然间,它停止了工作。它给我一个拒绝访问的错误代码。我在谷歌上搜索过,很明显这是发布16位应用程序的常见问题 工作站XP SP2环境根本没有改变,直到我不久前

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

我正在执行ShellExecute(NULL,“open”,exe_path.c_str(),NULL,”,SW_SHOWDEFAULT)。多年来,这项技术一直运转良好,但突然间,它停止了工作。它给我一个拒绝访问的错误代码。我在谷歌上搜索过,很明显这是发布16位应用程序的常见问题

工作站XP SP2环境根本没有改变,直到我不久前重建(我以前多次重建)它才开始工作

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

我尝试过许多替代方案,但它们都给出了相同的问题

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


请帮助我,因为我不能做任何事情没有计划启动。这是我调试代码的第一步

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


应用程序再次启动。现在我可以继续修复程序的其余部分了

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


应用程序再次启动。现在我可以继续修复程序的其余部分了

谁投票将此迁移到超级用户?这绝对是一个编程问题,属于stackoverflow。请在启动程序时尝试使用Process Monitor记录所有内容。谢谢Zian,我会看看它告诉我什么。是的,这绝对是一个编程问题。我的Win32代码不再工作了。进程监视器实际上没有给我任何信息。它甚至没有启动(ntvdm.exe和16位应用程序本身)。在谷歌搜索schrodenbug。谁投票将其迁移到超级用户?这绝对是一个编程问题,属于stackoverflow。请在启动程序时尝试使用Process Monitor记录所有内容。谢谢Zian,我会看看它告诉我什么。是的,这绝对是一个编程问题。我的Win32代码不再工作了。进程监视器实际上没有给我任何信息。它甚至不启动(ntvdm.exe和16位应用程序本身)。在谷歌上搜索schrodenbug。修复了无更改中断的更改:修复了无更改中断的更改:P