重命名程序或其工作目录会改变行为吗?

重命名程序或其工作目录会改变行为吗?

这绝对是我很长时间以来遇到的最奇怪的错误……

我在 Windows 10 上有一个非常简单的 .exe,是我自己使用 MSVC 和 Allegro 库(使用 DirectX)编译的。源代码如下,以防细节很重要,但要点是:

  • 当我运行代码时,DirectDraw 会引发运行时错误。
  • 如果我重命名可执行文件,错误就会消失并且程序可以成功运行。
  • 如果我将可执行文件移动到不同的文件夹,或者重命名该文件夹,则程序将成功运行。
  • 如果我将可执行文件/文件夹重命名为原来的名称,错误就会再次出现。

文件夹中没有其他文件。我唯一能想到的是 Windows 正在以某种方式查找绝对路径可执行文件并根据该值表现不同(缓存一些兼容性信息?)

知道发生了什么吗?实际上,我可以简单地重命名可执行文件并继续我的一天,但现在我真的很好奇为什么会发生这种行为......

PS:代码如下,使用Allegro 4.4库。

#include "allegro.h"
int main(int argc, char **argv)
{
    allegro_init();
    set_color_depth(8);
    set_gfx_mode(GFX_AUTODETECT_FULLSCREEN, 640, 480, 0, 0);
    exit(0);
}
END_OF_MAIN()

当我运行代码时,尝试设置视频模式时出现错误(E_NOIMPL)。

答案1

您应该知道,Windows 将程序的完整路径存储在注册表或桌面中。如果您重新排列程序的名称或目录,则需要在注册表中搜索程序的名称。

值得一看的一个地方是 APPPATHS,您可以在其中创建所需程序的快捷方式。您可以复制 write.exe,并将其中的字符串 (wordpad.exe) 替换为不再使用的名称 (例如 zdirectx.exe),并在 apppath 注册表中创建一个条目,directx.exe当您调用时它将启动zdirectx.exe。然后您也可以调用您的程序directx.exe

我使用这种技术将许多程序内容移出路径,同时仍保持程序可访问。

相关内容