我们有一个自动更新的Delphi应用程序,当我们更新程序时,我们更改当前的exe名称并将其更新的版本放在同一个文件夹中。这有一些很大的好处,并确保下次运行程序时,将调用更新的版本。
话虽如此,如果我还可以调用检查运行的进程是否使用正确的名称链接到exe,或者是否发生了更新,那将会很棒。
有谁知道如何辨别这个?
提前致谢。
答案 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。然后定期检查它是否已经改变......