Inno Setup始终以Pascal脚本代码以32位模式启动PowerShell

时间:2018-12-07 09:59:40

标签: windows installer inno-setup pascalscript wow64

我想在我的Inno安装程序的ssPostInstall步骤中使用PowerShell(64位版本),但它始终会打开32位PowerShell。

如您在脚本中所见,我的Inno Setup被配置为64位应用程序。 当我启动安装程序时,我可以在任务管理器中看到它正在作为32位应用程序运行

enter image description here

另外,将要打开的PowerShell处于32位模式。

enter image description here

这是我的Inno Stup脚本:

[Setup]
ArchitecturesAllowed=x64
ArchitecturesInstallIn64BitMode=x64
PrivilegesRequired=admin

[Code]
Procedure CurStepChanged(CurrentStep:TSetupStep);
var
  i, ResultCode, ErrorCode: Integer;
  findRec: TFindRec;
  isInstallationCmdSuccessful: Boolean;  
  folderNameOfUpdateIni: String;
  ReturnCode: Boolean;

begin  
  if CurrentStep = ssPostInstall then begin
      Log('Starting post install steps, calling install.ps1');
      ReturnCode := ShellExec('open', ExpandConstant('{sys}\WindowsPowerShell\v1.0\powershell.exe'), '', '', SW_SHOWNORMAL, ewWaitUntilTerminated, ErrorCode);
      if (ReturnCode = True) then
        Log('post install returned true')
      else
        Log('post install returned false');


      Log('Starting post install steps, calling install.ps1');
      ReturnCode := ShellExec('open', ExpandConstant('{syswow64}\WindowsPowerShell\v1.0\powershell.exe'), '', '', SW_SHOWNORMAL, ewWaitUntilTerminated, ErrorCode);
      if (ReturnCode = True) then
        Log('post install returned true')
      else
        Log('post install returned false');
  end;
end;

如何强制Inno安装程序打开64位PowerShell?

1 个答案:

答案 0 :(得分:2)

如果要允许Pascal脚本代码功能使用64位System32文件,请使用EnableFsRedirection functiondisable WOW64 file system redirection

您也不能使用ShellExec,而需要使用Exec function

OldState := EnableFsRedirection(False);
try
  ReturnCode :=
    Exec('powershell.exe', '', '', SW_SHOWNORMAL, ewWaitUntilTerminated, ErrorCode);
finally
  EnableFsRedirection(OldState);
end;

顺便说一句,ArchitecturesInstallIn64BitMode不能/不能使Inno Setup作为64位应用程序运行。无论如何,Inno Setup是32位应用程序。