WinAPI:在位置更改时查找自己的可执行目录 < >我想创建一个C++程序,它不断检查可执行文件的位置和移动。 如果它不在某个定义的位置,则将其移动到该位置

WinAPI:在位置更改时查找自己的可执行目录 < >我想创建一个C++程序,它不断检查可执行文件的位置和移动。 如果它不在某个定义的位置,则将其移动到该位置,c++,winapi,getmodulefilename,C++,Winapi,Getmodulefilename,这只适用于一次性运行 然而,我的问题是,当我运行可执行文件并将GetModuleFileName放在循环中时, 并将可执行文件移动到其他位置,则GetModuleFileName不会返回 新位置,我希望它返回它,我对WinAPI非常陌生,几乎不了解基本知识,所以请不要开始抨击我或其他什么…GetModuleFileName返回已加载模块的位置。在模块的生命周期内,返回的值保持不变 你所问的是一个不合理的问题。文件和模块是不同的。加载一个模块,然后就有了一个模块。如果将该文件复制到其他位置,则该文

这只适用于一次性运行

然而,我的问题是,当我运行可执行文件并将GetModuleFileName放在循环中时, 并将可执行文件移动到其他位置,则GetModuleFileName不会返回
新位置,我希望它返回它,我对WinAPI非常陌生,几乎不了解基本知识,所以请不要开始抨击我或其他什么…

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

你所问的是一个不合理的问题。文件和模块是不同的。加载一个模块,然后就有了一个模块。如果将该文件复制到其他位置,则该文件独立于模块。此外,当加载模块时,文件被锁定。因此,无法删除从中加载运行模块的文件


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

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

我不确定这是否可行。您可以检查您的可执行文件是否位于所需目录中,但请将其移回。。。我不是专家,但我认为用户模式功能禁止此类操作。如果您移动正在运行的可执行文件,您就不会移动当前的可执行文件-从流程的角度来看,您只是将某个文件移动到某个位置(我不知道这是否可能,正如Petro所指出的,您可以移动内存中当前的文件吗?)。可执行文件将加载到内存中。它只“记住”从何处运行。您试图解决什么问题?如果程序能够确定可执行文件的移动时间和位置,这是可能的。移动的事实很容易察觉。正如DavidHeffernan所指出的,考虑更多的细节问题。还有,我有一种奇怪的感觉,你是个初学恶意软件的人。。