在Inno Setup中执行UninstallString
问题描述:
我的要求是在安装和卸载以前的版本之前检查以前安装的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}
在此先感谢。
答
这不是(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;
谢谢这个解决方案吨,工作正常。 – DeeJay007
在卸载向导中,我有三个选项_修改_,_修复_,_删除_。是否有任何参数可用于选择_Remove_并在'Exec'函数中继续卸载。我试过'/无声',但它似乎不起作用。 – DeeJay007
这是'MsiExec'上的一些隐藏功能。我从来没有能够发现它是如何工作的。试着问一个新问题。有人会知道肯定的。 –