2

我对 Inno Setup 卸载程序有疑问。我有一个要执行以跟踪安装和卸载的 exe 文件。exe 非常简单,向服务器发送消息。

[Files]
Source: "Tracker\LocalSandboxInstallTracker.exe"; DestDir: "{app}/Tracker";
Source: "Tracker\LocalSandboxInstallTracker.exe.config"; DestDir: "{app}/Tracker";
Source: "Tracker\Tracker.Client.dll"; DestDir: "{app}/Tracker";

[Run]
Filename: "{app}\Tracker\LocalSandboxInstallTracker.exe"; Parameters: " {#MyAppVersion} install"; Flags: runhidden; StatusMsg: "Sending tracking data..."

[Code]
procedure InitializeUninstallProgressForm();
var
  ResultCode: Integer;
begin
  Exec ('{app}\Tracker\LocalSandboxInstallTracker.exe',' {#MyAppVersion} uninstall','',SW_SHOW, ewWaitUntilTerminated, ResultCode);
end;

安装时的调用运行良好,但在卸载时却不行。我在我的 Exec 命令上放置了一个断点,它确实通过了那里,但似乎没有调用 exe。

4

2 回答 2

5

您必须先扩展{app}常量,然后再将其传递给Exec脚本函数。ExpandConstant每当您需要获取常量的值时使用。以这种方式修改您的脚本:

Exec(ExpandConstant('{app}\Tracker\LocalSandboxInstallTracker.exe'), 
  '{#MyAppVersion} uninstall', '', SW_SHOW, 
  ewWaitUntilTerminated, ResultCode);

此外,您应该检查函数结果和输出结果代码,以便在Exec函数失败时做出反应。您将获得的错误代码ResultCode可以检查System Error Codes参考或用于SysErrorMessage(ResultCode)从脚本中获取错误描述。

于 2012-11-28T18:31:54.057 回答
4

如果要{app}在 Exec 调用中使用常量,则必须调用 ExpandConstant 函数:

[Code]
procedure InitializeUninstallProgressForm();
var
  ResultCode: Integer;
begin
  Exec (ExpandConstant('{app}\Tracker\LocalSandboxInstallTracker.exe')
    ,' {#MyAppVersion} uninstall','',SW_SHOW, ewWaitUntilTerminated, ResultCode);
end;

否则,您将无法找到该 exe。

于 2012-11-28T18:34:50.887 回答