TL; DR版本:如何知道InnoSetup脚本是否需要重新启动?
在InnoSetup脚本,如何检测,如果因为这是在使用的文件需要重新启动?
更详细的版本:
我有以下特征的Inno Setup的脚本:
的
ShouldSkipPage
功能实现,使所有页面(除欢迎页)被跳过,除非检查欢迎页面上的自定义“高级选项”复选框:function ShouldSkipPage(PageID: Integer): Boolean; begin if ((PageID = wpSelectDir) or (PageID = wpSelectProgramGroup) or (PageID = wpSelectTasks) or (PageID = wpFinished) or (PageID = wpReady)) then begin Result := not advancedCheckBox.Checked; end; end;
CloseApplications
和RestartApplications
设置为false
(*),以及一些文件有restartreplace
和uninsrestartdelete
标志,所以重新启动将需要完成安装文件是否已被使用现在
,如果需要重新启动,无论“高级选项”复选框的状态如何,我都希望显示“完成”页面,因为我不想在没有提示用户的情况下重新启动。所以,我的代码将是类似的东西:
function ShouldSkipPage(PageID: Integer): Boolean;
begin
if ((PageID = wpSelectDir) or
(PageID = wpSelectProgramGroup) or
(PageID = wpSelectTasks) or
(PageID = wpReady)) then
begin
Result := not advancedCheckBox.Checked;
end
else if ((PageID = wpFinished)) then
begin
Result := (not advancedCheckBox.Checked) and (not IsRestartNeeded);
end
end;
不幸的是,没有IsRestartNeeded
功能(NeedRestart
存在,但它是一个事件功能)。我花了很长时间看文档,但是我没有找到任何可以给我提供这些信息的函数。
我能想到的唯一的选择是看HKLM\System\CurrentControlSet\Control\Session Manager\PendingFileRenameOperations
,看它是否包含我的任何文件,但它是一个相当丑陋的解决方案......
(*)的文件,我想替换或删除是这个扩展使用的一个shell扩展和一些DLL。我不依赖重新启动管理器的原因是因为它似乎不适用于explorer.exe
:该过程立即重新启动,并且我的文件再次被锁定。
@TLama,你是什么意思?你能详细说明吗? –
收回,对不起... – TLama
重新启动管理器看起来不适合你,这很奇怪;重新启动浏览器面对shell扩展应该是其主要目标之一。 – Miral