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