在 Inno Setup 中执行 UninstallString
Executing UninstallString in Inno Setup
我的要求是在安装之前检查 SQL native Client 11 的先前安装并卸载先前版本。我已经能够检查以前的安装没有问题,但是,我无法卸载它。
我使用了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}
提前致谢。
这不是 (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;
我的要求是在安装之前检查 SQL native Client 11 的先前安装并卸载先前版本。我已经能够检查以前的安装没有问题,但是,我无法卸载它。
我使用了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}
提前致谢。
这不是 (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;