找出哪个进程阻止修改应用程序数据文件
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;
有时会发生这样的情况,我的应用程序的某些文件被某些进程使用。例如,用户打开应用程序日志或类似的东西,但忘记关闭它。这会在 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;