首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在Inno设置中执行UninstallString

在Inno设置中执行UninstallString
EN

Stack Overflow用户
提问于 2017-02-14 09:31:41
回答 1查看 2.1K关注 0票数 2

我的要求是在安装之前,先检查SQL本机客户端11的安装情况,然后卸载以前的版本。我已经能够检查以前的安装没有任何问题,但是,我无法卸载同样的。

我使用了How to detect old installation and offer removal?中提到的解决方案

在运行时,我得到以下错误

例外:内部错误:未知常数"A22EED3F-6DB6-4987-8023-6C6B7030E554“。

(常量是本机客户端的GUID )在行的执行过程中

代码语言:javascript
复制
Exec(ExpandConstant(sUnInstallString), '', '', SW_SHOW, ewWaitUntilTerminated, iResultCode);

sUnInstallString

代码语言:javascript
复制
MsiExec.exe /I{A22EED3F-6DB6-4987-8023-6C6B7030E554}

提前谢谢。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-02-14 09:56:35

这不是一个(Inno安装)常量。那是个盖德。删除ExpandConstant调用。

您需要将卸载字符串拆分为程序路径及其参数。

代码语言:javascript
复制
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;
票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/42222356

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档