WinAPI: найти каталог собственного исполняемого при изменении местоположения

0

Я хотел бы создать программу C++, которая постоянно проверяет местоположение исполняемых файлов и перемещает их в определенное место, если оно там отсутствует.

Это работает один раз.

Однако моя проблема заключается в том, что когда я запускаю исполняемый файл и помещаю GetModuleFileName в цикл и перемещаю исполняемый файл в другое место, имя GetModuleFileName не возвращает новое местоположение, из которого я хочу его вернуть, я очень новый для WinAPI и едва понять основы, поэтому, пожалуйста, не начинайте меня бить или что-то еще...

  • 0
    Я не уверен, что это возможно. Вы можете проверить, находится ли ваш исполняемый файл в нужном каталоге, но переместить его обратно ... Я не гуру, но я думаю, что функции пользовательского режима запрещают такие действия.
  • 0
    Если вы перемещаете исполняемый файл, вы не перемещаете текущий исполняемый файл - с точки зрения вашего процесса, вы просто перемещаете какой-то файл в какое-то место (и я не знаю, возможно ли это, как заметил Петро) - можете ли вы переместить файл, который в данный момент находится в памяти?).
Показать ещё 6 комментариев
Теги:
winapi

2 ответа

1

GetModuleFileName возвращает местоположение загруженного модуля. Возвращаемое значение остается постоянным в течение всего срока службы модуля.

То, о чем вы просите, не является секвенсором. Файлы и модули разные. Вы загружаете модуль, а затем у вас есть модуль. Если вы копируете этот файл в другом месте, это не зависит от модуля. Что еще, когда модуль загружен, файл заблокирован. Поэтому вы не можете удалить файл, из которого загружен загружаемый модуль.

Честно говоря, поскольку вы признаете, что являетесь новичком в Win32, я думаю, вы должны пересмотреть решение, которое вы выбрали для любой реальной проблемы. Маловероятно, что выбранный вами курс действительно является правильным решением.

0

Когда ваша программа загружается, вызовите GetModuleFileName() чтобы определить местоположение файла, который использовался для запуска вызывающего процесса. Если это не так, как должно быть, переместите файл, затем вызовите CreateProcess() чтобы выполнить перемещенный файл как новый процесс, а затем выйдите из текущего процесса.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню