找出哪个进程阻止修改应用程序数据文件

Find out which process prevents to modify application data files

有时会发生这样的情况,我的应用程序的某些文件被某些进程使用。例如,用户打开应用程序日志或类似的东西,但忘记关闭它。这会在 installing/upgrading/uninstalling 时导致一些错误。在这种情况下,我想找出哪个进程正在使用文件,并向用户显示一条消息,表明文件已被使用。

在 Inno Setup 中是否可以找出什么进程阻止脚本修改文件?至少,当我尝试在代码部分执行此操作时。

Inno Setup 可以自动检查安装的文件是否被某些进程锁定,并提供用户自动关闭(并稍后重新启动)应用程序(自 5.5.0 起)。

确保 CloseApplications directive 设置为其默认值 yes

虽然默认情况下,只检查 *.exe,*.dll,*.chm 个文件。如果您还想检查其他或所有其他文件,请修改 CloseApplicationsFilter directive:

[Setup]
; default
CloseApplications=yes
; check all files
CloseApplicationsFilter=*.*

如果您通过代码安装某些文件,请使用 RegisterExtraCloseApplicationsResources event function:

procedure RegisterExtraCloseApplicationsResources;
begin
  RegisterExtraCloseApplicationsResource(
    False, ExpandConstant('{userappdata}\My Program.log')); 
end;