WinAPI:在位置更改时查找自己的可执行文件的目录

时间:2013-11-24 15:18:59

标签: c++ winapi getmodulefilename

我想创建一个不断检查可执行文件位置和移动的C ++程序 如果它不在那里它到一个确定的位置。

这适用于一次性运行。

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

2 个答案:

答案 0 :(得分:1)

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

你问的是一个非选票。文件和模块是不同的。您加载一个模块,然后你有一个模块。如果将该文件复制到其他位置,则该模块与模块无关。此外,当加载模块时,文件被锁定。因此,您无法删除加载正在运行的模块的文件。

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

答案 1 :(得分:0)

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