如何将安装程序复制到临时文件然后运行它?

时间:2015-12-10 15:59:34

标签: inno-setup pascalscript

我正在尝试将安装程序复制到临时文件夹,然后从该位置运行它。

这是我想要做的,但到目前为止无济于事。

FileCopy(ExpandConstant('{srcexe}'), ExpandConstant('{tmp}\Setup.exe'), True);
Exec(ExpandConstant('{tmp}\Setup.exe'), '', '', SW_SHOW, ewWaitUntilTerminated, ResultCode)

如何将安装程序复制到临时文件,然后从代码部分运行它?

1 个答案:

答案 0 :(得分:2)

不知道为什么,但有明确的检查阻止FileCopy function复制安装程序本身。

请参阅a PathCompare check in FileCopy branch of CmnFunc2Proc in ScriptFunc_R.pas

end else if Proc.Name = 'FILECOPY' then begin
  ExistingFilename := Stack.GetString(PStart-1);
  if PathCompare(ExistingFilename, SetupLdrOriginalFilename) <> 0 then
    Stack.SetBool(PStart, CopyFileRedir(ScriptFuncDisableFsRedir,
      ExistingFilename, Stack.GetString(PStart-2), Stack.GetBool(PStart-3)))
  else
    Stack.SetBool(PStart, False);

您当然可以通过致电Windows copy command来解决这个问题:

Exec(
  ExpandConstant('{cmd}'),
  Format('/C copy "%s" "%s"', [ExpandConstant('{srcexe}'), ExpandConstant('{tmp}\Setup.exe')]),
  '', SW_HIDE, ewWaitUntilTerminated, ResultCode);