2017-02-14 190 views
1

我的要求是在安裝和卸載以前的版本之前檢查以前安裝的SQL本機客戶端11。我已經能夠檢查以前的安裝沒有問題,但是,我無法卸載相同的。在Inno Setup中執行UninstallString

我應用於How to detect old installation and offer removal?

提到的溶液在運行時,我得到以下錯誤

Exception: Internal error: Unknown constant "A22EED3F-6DB6-4987-8023-6C6B7030E554".

(其中常數是本地客戶端的GUID)的執行過程中線

Exec(ExpandConstant(sUnInstallString), '', '', SW_SHOW, ewWaitUntilTerminated, iResultCode); 

sUnInstallString

MsiExec.exe /I{A22EED3F-6DB6-4987-8023-6C6B7030E554} 

在此先感謝。

回答

2

這不是(Inno Setup)常數。這是一個GUID。刪除ExpandConstant電話。

而且您需要將卸載字符串拆分爲程序路徑及其參數。

var 
    P: Integer; 
    UninstallPath: string; 
    UninstallParams: string; 
begin 
    { ... } 

    { In case the program path is quoted, because it contains spaces. } 
    { (it's not in your case, but it can be, in general) } 
    if Copy(sUnInstallString, 1, 1) = '"' then 
    begin 
    Delete(sUnInstallString, 1, 1); 
    P := Pos('"', sUnInstallString); 
    end 
    else P := 0; 

    if P = 0 then 
    begin 
    P := Pos(' ', sUnInstallString); 
    end; 
    UninstallPath := Copy(sUnInstallString, 1, P - 1); 
    UninstallParams := TrimLeft(Copy(sUnInstallString, P + 1, Length(sUnInstallString) - P)); 

    Exec(UninstallPath, UninstallParams, '', SW_SHOW, wWaitUntilTerminated, iResultCode); 
    { ... } 
end; 
+0

謝謝這個解決方案噸,工作正常。 – DeeJay007

+0

在卸載嚮導中,我有三個選項_修改_,_修復_,_刪除_。是否有任何參數可用於選擇_Remove_並在'Exec'函數中繼續卸載。我試過'/無聲',但它似乎不起作用。 – DeeJay007

+0

這是'MsiExec'上的一些隱藏功能。我從來沒有能夠發現它是如何工作的。試着問一個新問題。有人會知道肯定的。 –