0
我已經設置我的安裝程序以使用此post中提及的代碼檢查現有版本,然後在安裝新版本之前調用卸載程序。很棒。我的問題是,卸載/安裝步驟後,新版本卸載(unins000.exe)沒有創建(或者它可能是但被刪除的IDK)。這可以防止稍後再正確卸載新版本。如果沒有現有版本,則始終創建卸載程序。我究竟做錯了什麼?版本升級後未創建卸載程序
我已經設置我的安裝程序以使用此post中提及的代碼檢查現有版本,然後在安裝新版本之前調用卸載程序。很棒。我的問題是,卸載/安裝步驟後,新版本卸載(unins000.exe)沒有創建(或者它可能是但被刪除的IDK)。這可以防止稍後再正確卸載新版本。如果沒有現有版本,則始終創建卸載程序。我究竟做錯了什麼?版本升級後未創建卸載程序
你可以使用克雷格·麥昆的解決方案在這裏原貼:InnoSetup: How to automatically uninstall previous installed version?
function GetUninstallString(): String;
var
sUnInstPath: String;
sUnInstallString: String;
begin
sUnInstPath := ExpandConstant('Software\Microsoft\Windows\CurrentVersion\Uninstall\{{A227028A-40D7-4695-8BA9-41DF6A3895C7}_is1'); //Your App GUID/ID
sUnInstallString := '';
if not RegQueryStringValue(HKLM, sUnInstPath, 'UninstallString', sUnInstallString) then
RegQueryStringValue(HKCU, sUnInstPath, 'UninstallString', sUnInstallString);
Result := sUnInstallString;
end;
function IsUpgrade(): Boolean;
begin
Result := (GetUninstallString() <> '');
end;
function InitializeSetup: Boolean;
var
V: Integer;
iResultCode: Integer;
sUnInstallString: String;
begin
if RegValueExists(HKEY_LOCAL_MACHINE,'Software\Microsoft\Windows\CurrentVersion\Uninstall\{A227028A-40D7-4695-8BA9-41DF6A3895C7}_is1', 'UninstallString') then begin
//Your App GUID/ID
V := MsgBox(ExpandConstant('{cm:YesNoUninstall}'), mbInformation, MB_YESNO); //Custom Message if App installed
if V = IDYES then begin
sUnInstallString := GetUninstallString();
sUnInstallString := RemoveQuotes(sUnInstallString);
Exec(ExpandConstant(sUnInstallString), '', '', SW_SHOW, ewWaitUntilTerminated, iResultCode);
Result := True; //if you want to proceed after uninstall
//Exit; //if you want to quit after uninstall
end
else begin
Result := False; //when older version present and not uninstalled
end;
end
else begin
Result := True; //when no previous version found
end;
end;
你執行卸載安裝的任何部分開始之前 - 在InitializeSetup通常是()?你確定目標目錄(應放置unins000.exe的目錄)是否正確? – Slappy 2012-07-17 05:36:42
您是否在'[Setup]'部分使用'Uninstallable = no'或類似的選項?另外:通常不建議在更新之前卸載。只要將更新安裝在頂部並使用'[InstallDelete]'來擺脫任何現在多餘的文件。另外,如果你確實建議你最終運行卸載程序,那麼你必須從「PrepareToInstall」中這樣做。不早,不晚。 – Miral 2012-07-17 09:12:13
我開始在每個我引用的帖子的CurStepChanged(CurStep = ssInstall)中進行卸載。卸載的= YES。我需要運行卸載程序,因爲我的服務需要在升級完成前關閉並正常運行。我會嘗試將卸載步驟更改爲PrepareToInstall。 – Dan 2012-07-17 11:29:09