【问题标题】:Cannot launch 16-bit application anymore无法再启动 16 位应用程序
【发布时间】: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


【解决方案1】:

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

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

【讨论】:

  • 修复了 no-change-break 的更改:P
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多