Как я могу определить, изменилось ли имя exe с момента запуска процесса? - PullRequest
2 голосов
/ 13 июня 2011

У нас есть приложение Delphi, которое автоматически обновляется, когда мы обновляем программу, мы меняем текущее имя исполняемого файла и помещаем его обновленную версию в ту же папку. это имеет некоторые большие преимущества и гарантирует, что при следующем запуске программы будет вызвана обновленная версия.

Сказав это, было бы замечательно, если бы я мог также позвонить, чтобы проверить, что запущенный процесс связан с exe-файлом с правильным именем или если произошло обновление.

Кто-нибудь знает, как это определить?

Заранее спасибо.

Ответы [ 4 ]

3 голосов
/ 13 июня 2011

Я думаю, вам нужно настроить объект уведомления об изменениях с помощью API FindFirstChangeNotification (см. MSDN ) с фильтром FILE_NOTIFY_CHANGE_FILE_NAME. Затем, когда вы получите уведомление, проверьте, есть ли у вас exe, и примите соответствующие меры. Есть доступные компоненты, которые обертывают этот API, т.е. если у вас установлен JVCL , то я уверен, что он есть.

0 голосов
/ 15 июня 2011

Простой метод для Delphi состоит в том, чтобы использовать ParamStr (0) - у которого есть полный путь и имя файла exe.Сохраните исполняемый файл DateTimeStamp при запуске программы.Затем периодически проверяйте, изменилось ли оно ...

0 голосов
/ 13 июня 2011

Вы можете использовать GetCurrentProcessId () , чтобы получить PID, который вы передаете OpenProcess () . Затем вы можете получить полный путь к местоположению с помощью GetModuleFileNameEx () . Я предполагаю, что у вас есть какое-то соглашение об иерархии файлов / именовании, которое вы можете использовать, чтобы определить, является ли текущий exe последним. PathStripPath () может пригодиться или некоторые другие функции пути .

0 голосов
/ 13 июня 2011

Если процесс запущен, вы не можете переименовать его исполняемый файл AFAIK. Так что я не понимаю твоего вопроса.

Чтобы проверить работающую версию exe, используйте API GetVersion и получите номер его версии.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...