У меня достаточно стандартный установщик Inno Setup.Когда деинсталляция запускается, необходима перезагрузка, она удаляет сервис и отменяет регистрацию DLL.У меня есть некоторый код, который обнаруживает более старую версию программного обеспечения (спасибо stackoverflow).Если обнаружена более старая версия и пользователь хочет установить более новую версию:
- Деинсталлятор вызывается
- Программа деинсталлирована
- Система (правильно)перезагружается
- Система запускается, и я снова вхожу в систему
Что должно произойти сейчас (ИМХО), это то, что установщик должен продолжить с того места, где он остановился, т.е.установка новой версии в ту же папку, что и старая версия.Но это не так, ничего не происходит.Я прочитал файлы справки, проверил переключатели (в меру своих ограниченных возможностей) и спросил доктора Гугла, но ничего.
Мой вопрос: Возможно ли это сделать, т.е.,продолжить установку после перезагрузки, и, если да, то как?
Вот мой (в значительной степени стековый поток) код, который работает, за исключением того, что ничего не продолжается при перезагрузке системы (если вам нужен какой-либо из других разделовустановщик, дайте мне знать):
function InitializeSetup(): Boolean;
var
oldVersion: String;
uninstaller: String;
ErrorCode: Integer;
begin
if RegKeyExists(HKEY_LOCAL_MACHINE, 'SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\{#MyAppID}_is1') then
begin
RegQueryStringValue(HKEY_LOCAL_MACHINE, 'SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\{#MyAppID}_is1', 'DisplayVersion', oldVersion);
if (CompareVersion(oldVersion, '{#MyAppVersion}') < 0) then
begin
if MsgBox('Version ' + oldVersion + ' of EMPSecure is already installed. Continue to use this old version?', mbConfirmation, MB_YESNO) = IDYES then
begin
Result := False;
end
else
begin
RegQueryStringValue(HKEY_LOCAL_MACHINE, 'SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\{#MyAppID}_is1', 'UninstallString', uninstaller);
ShellExec('runas', uninstaller, '/SILENT', '', SW_HIDE, ewWaitUntilTerminated, ErrorCode);
if (ErrorCode <> 0) then
begin
MsgBox( 'Failed to uninstall EMPSecure version ' + oldVersion + '. Please restart Windows and run setup again.', mbError, MB_OK );
Result := False;
end
else
begin
Result := True;
end;
end;
end
else
begin
MsgBox('Version ' + oldVersion + ' of EMPsecure is already installed. This installer will exit.', mbInformation, MB_OK);
Result := False;
end;
end
else
begin
Result := True;
end;
end;