我想在安装之前运行一个应用程序,我在Inno安装脚本(Pascal)上使用此代码:
function InitializeSetup():boolean;
var
ResultCode: integer;
begin
// Launch Notepad and wait for it to terminate
if ExecAsOriginalUser('{src}\MyFolder\Injector.exe', '', '', SW_SHOW, ewWaitUntilTerminated, ResultCode) then
begin
// handle success if necessary; ResultCode contains the exit code
end
else begin
// handle failure if necessary; ResultCode contains the error code
end;
// Proceed Setup
Result := True;
end;
当我使用“{win} \ notepad.exe”时,它可以工作但是当我使用“{src} \ MyFolder \ Injector.exe”时,安装程序无法打开我的程序并继续安装。
注意:Injector的app.manifest有'requireAdministrator'。但是,此应用程序应以管理员身份运行。
那有什么不对?
答案 0 :(得分:3)
在代码中使用ExpandConstant
等值时,您需要使用{src}
函数。
但是,InitializeSetup
运行安装任务还为时过早。您应该将此代码移至CurStepChanged(ssInstall)
。
此外,如果它需要管理员权限,则必须使用Exec
,而不是ExecAsOriginalUser
运行。
答案 1 :(得分:1)
这可能对你有用......我相信这个问题是因为整个路径中的空间......应该通过双重引用路径来解决...
Exec('cmd.exe','/c "'+ExpandConstant('{src}\MyFolder\Injector.exe')+'"', '',SW_SHOW,ewWaitUntilTerminated, ResultCode);
欢呼声..