2

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

「古いインストールを検出して削除を提供する方法」に記載されている解決策を使用しました。

実行時に、次のエラーが表示されます

例外: 内部エラー: 不明な定数 "A22EED3F-6DB6-4987-8023-6C6B7030E554"。

(ここで、定数はネイティブ クライアントの GUID です) 行の実行中

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

sUnInstallStringは_

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

前もって感謝します。

4

1 に答える 1

4

それは (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;
于 2017-02-14T09:56:35.520 に答える