how to terminate installer if unstallation of legacy version of software is cancelled before executing it?
我使用 innosetup 创建了一个安装程序 (myinstaller) 来安装应用程序 (myapp)。
代码片段是:
1 2 3 4 5 6 7 8 9 10 11 | function legacy_check(): Boolean; begin ShellExec('runas', 'rundll32.exe', 'dfshim.dll,ShArpMaintain SecretsUtility.application, Culture=neutral, PublicKeyToken=0000000000000000, processorArchitecture=amd64', '', SW_HIDE, ewWaitUntilTerminated, ErrorCode); Result := True; end; function InitializeSetup(): Boolean; begin Result:=legacy_check(); // after this line only inno setup wizard page will appear // code to install latest version end; |
这里的 legacy_check() 函数检查系统中是否存在旧版本的 myapp 并将其卸载并返回 true 。以便 myinstaller 可以继续进行。
但是,这里在卸载旧版本时,会询问用户是否卸载。那个时候如果用户按 OK 卸载,它工作正常。但是如果用户按取消卸载旧版本,它应该终止 myinstaller。但它没有终止,因为它仍然返回 True。
所以我认为当用户按下取消按钮卸载时我需要获取一些返回码,以便使用返回码我可以返回真或假。
那么当用户按下取消卸载时,有什么方法可以获取返回码,以便我可以在行后使用它,
1 | ShellExec('runas', 'rundll32.exe', 'dfshim.dll,ShArpMaintain SecretsUtility.application, Culture=neutral, PublicKeyToken=0000000000000000, processorArchitecture=amd64', '', SW_HIDE, ewWaitUntilTerminated, ErrorCode); ? |
否则请告诉我如何静默卸载它。我对如何在 ShellExec 中使用 /SILENT 参数感到困惑,因为已经存在参数。
所以请给我一些想法。
我改变了我的代码如下来达到要求:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | function legacy_check(): Boolean; begin ShellExec('runas', 'rundll32.exe', 'dfshim.dll,ShArpMaintain SecretsUtility.application, Culture=neutral, PublicKeyToken=0000000000000000, processorArchitecture=amd64', '', SW_HIDE, ewWaitUntilTerminated, ErrorCode); if RegKeyExists(HKEY_CURRENT_USER,'Software\\Microsoft\\Windows\\CurrentVersion\\Uninstall\\myapp') then Result := False else Result := True; end; function InitializeSetup(): Boolean; begin Result:=legacy_check(); if Not Result then begin Result:=False else // code to install latest version end; |