WinAPI: найти каталог собственного исполняемого при изменении местоположения
Я хотел бы создать программу на C++, которая постоянно проверяет расположение исполняемых файлов и перемещает их в определенное место, если его там нет.
Это работает за один раз.
Однако моя проблема заключается в том, что когда я запускаю исполняемый файл и помещаю GetModuleFileName в цикл и перемещаю исполняемый файл в другое место, GetModuleFileName не возвращает новое местоположение, из которого я хочу его вернуть, я очень новый чтобы WinAPI и едва понять основы, так что, пожалуйста, не начинайте избивать меня или что-то еще...
2 ответа
GetModuleFileName возвращает местоположение загруженного модуля. Возвращаемое значение остается постоянным в течение всего срока службы модуля.
То, что вы спрашиваете, не является секвестром. Файлы и модули разные. Вы загружаете модуль, а затем у вас есть модуль. Если вы копируете этот файл в другое место, это не зависит от модуля. Более того, когда модуль загружен, файл блокируется. Таким образом, вы не можете удалить файл, из которого был загружен работающий модуль.
Честно говоря, поскольку вы признаете, что были новичком в Win32, я думаю, вам следует пересмотреть решение, которое вы выбрали для какой бы то ни было реальной проблемы. Вряд ли выбранный вами курс действительно является правильным решением.
Когда ваша программа загружается, позвоните GetModuleFileName()
определить местоположение файла, который использовался для запуска вызывающего процесса. Если это не то место, где нужно, переместите файл, затем вызовите CreateProcess()
выполнить перемещенный файл как новый процесс, а затем выйти из текущего процесса.