0

我想创建一个 C++ 程序,该程序不断检查可执行文件的位置,如果不存在则将其移动到定义的位置。

这适用于一次性运行。

但是我的问题是,当我运行可执行文件并将 GetModuleFileName 放在一个循环上并将可执行文件移动到不同的位置时,GetModuleFileName 不会返回新位置,我希望它返回它,我很新到 WinAPI 并且几乎不了解基础知识,所以请不要开始抨击我或其他什么...

4

2 回答 2

1

GetModuleFileName 返回已加载模块的位置。返回的值在模块的生命周期内保持不变。

你要问的是非sequer。文件和模块是不同的。你加载一个模块,然后你就有一个模块。如果您将该文件复制到其他地方,则该文件独立于模块。更重要的是,当一个模块被加载时,文件被锁定。因此,您无法删除从中加载正在运行的模块的文件。

坦率地说,既然你承认自己是 Win32 的新手,我认为你应该重新考虑你为真正的问题选择的解决方案。您选择的课程不太可能真的是正确的解决方案。

于 2013-11-24T15:31:10.017 回答
0

当您的程序加载时,调用GetModuleFileName()以确定用于启动调用过程的文件的位置。如果不在需要的地方,则移动文件,然后调用CreateProcess()将移动的文件作为新进程执行,然后退出当前进程。

于 2013-11-24T19:57:15.453 回答