2017-02-14 27 views
1

私の要件は、インストール前にSQLネイティブクライアント11の以前のインストールを確認し、以前のバージョンをアンインストールすることです。私は以前のインストールを問題なく確認することができましたが、同じものをアンインストールすることはできません。InnoセットアップでUninstallStringを実行する

が、私は実行時にHow to detect old installation and offer removal?

に記載されたソリューションを使用し、私は実行中(定数は、ネイティブクライアントのGUIDである)次のエラー

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

を取得していますライン

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

アンインストールウィザードでは、_Modify_、_Repair _、_ Remove_という3つのオプションがあります。 _Remove_を選択し、 'Exec'機能でアンインストールを実行するためのパラメータがありますか?私は '/ SILENT'を試みましたが、うまくいかないようです。 – DeeJay007

+0

これは 'MsiExec'の隠し機能です。私は決してそれがどのように機能するかを知ることができませんでした。新しい質問をしてみてください。誰かが確かに知っているでしょう。 –

関連する問題