在Inno Setup卸载中调用exe

时间:2012-11-28 18:06:42

标签: inno-setup uninstall pascal

我对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。

2 个答案:

答案 0 :(得分:3)

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

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

其他方式,你找不到exe。

答案 1 :(得分:2)

在将{app}{#MyAppVersion}常量传递给Exec脚本函数之前,必须展开Exec(ExpandConstant('{app}\Tracker\LocalSandboxInstallTracker.exe'), '{#MyAppVersion} uninstall', '', SW_SHOW, ewWaitUntilTerminated, ResultCode); Exec常量。每当需要获取常量的值时,请使用ExpandConstant。以这种方式修改脚本:

ResultCode

此外,您应检查函数结果和输出结果代码,以便在SysErrorMessage(ResultCode)函数失败时作出反应。您可以在{{1}}中获得的错误代码可以查看System Error Codes引用,或使用{{1}}从脚本中获取错误说明。