2

我的要求是在安装和卸载以前的版本之前检查以前安装的 SQL native Client 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 回答