2013-11-24 29 views
0

我想创建一个C++程序,不断检查可执行文件的位置和移动 它定义的位置,如果它不是在那里找到自己的executeable的目录。WinAPI的:当位置有所改变

这适用于一次性运行。

但是我的问题是,当我运行可执行文件并把GetModuleFileName环路上, 和移动可执行文件到不同的位置,在GetModuleFileName不返回 新的位置,而我希望它返回它,我很新的WinAPI的和不太了解的基础知识,所以请不要开始抨击我或任何...

+0

我不确定这是可能的。您可以检查您的可执行文件是否位于所需的目录中,但将其移回...我不是古茹,但我认为用户模式功能禁止此类操作。 –

+0

如果您移动正在运行的可执行文件,那么您不会移动当前的可执行文件 - 从流程的角度来看,您只是将某个文件移动到某个位置(并且我不知道这是否可行,正如Petro指出的那样 - 您可以移动当前在内存中的文件?)。 –

+0

可执行文件被加载到内存中。它只是“记住”它从哪里运行。 –

回答

1

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

你所要求的是一种非sequiter。文件和模块是不同的。你加载一个模块,然后你有一个模块。如果您将该文件复制到其他地方,则与模块无关。更重要的是,当一个模块被加载时,文件被锁定。所以你不能删除正在运行的模块加载的文件。

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

0

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