如何在进程启动后检测exe名称是否已更改

时间:2011-06-13 08:37:10

标签: delphi winapi

我们有一个自动更新的Delphi应用程序,当我们更新程序时,我们更改当前的exe名称并将其更新的版本放在同一个文件夹中。这有一些很大的好处,并确保下次运行程序时,将调用更新的版本。

话虽如此,如果我还可以调用检查运行的进程是否使用正确的名称链接到exe,或者是否发生了更新,那将会很棒。

有谁知道如何辨别这个?

提前致谢。

4 个答案:

答案 0 :(得分:3)

我认为您必须使用FindFirstChangeNotification API设置更改通知对象(请参阅MSDN)并使用FILE_NOTIFY_CHANGE_FILE_NAME过滤器。然后,当您收到通知时,检查它是否与您的exe有关,并采取适当的措施。 有可用的组件包装此API,即如果您安装了JVCL,那么我很确定它有一个。

答案 1 :(得分:0)

如果进程正在运行,则无法重命名其可执行文件AFAIK。所以我不明白你的问题。

要检查正在运行的exe版本,请使用GetVersion API并检索其版本号。

答案 2 :(得分:0)

您可以使用GetCurrentProcessId()获取传递给OpenProcess()的PID。然后,您可以使用GetModuleFileNameEx()获取该位置的完全限定路径。我想你有某种文件层次结构/命名约定,你可以用它来确定当前的exe是否是最新的。 PathStripPath()可能很方便,或者其他一些path functions

答案 3 :(得分:0)

Delphi的一个简单方法是使用ParamStr(0) - 它具有exe的完整路径和文件名。在程序启动时存储exe文件的DateTimeStamp。然后定期检查它是否已经改变......