我对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。
答案 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}}从脚本中获取错误说明。