Inno Setup 始终以 Pascal 脚本代码以 32 位模式启动 PowerShell
Inno Setup always starts PowerShell in 32-bit mode in Pascal Script code
我想在 Inno Setup 的 ssPostInstall
步骤中使用 PowerShell(64 位版本),但它总是打开 32 位 PowerShell。
如您在我的脚本中所见,我的 Inno Setup 配置为 64 位应用程序。
当我开始设置时,我可以在任务管理器中看到它是 运行 作为 32 位应用程序
另外,将要打开的 PowerShell 是 32 位模式。
这是我的 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 Setup 打开 64 位 PowerShell?
如果要允许 Pascal Script 代码函数使用 64 位 System32
文件,请使用 EnableFsRedirection
function to disable WOW64 file system redirection.
而且你也不能用ShellExec
,你需要用Exec
function代替。
OldState := EnableFsRedirection(False);
try
ReturnCode :=
Exec('powershell.exe', '', '', SW_SHOWNORMAL, ewWaitUntilTerminated,
ErrorCode);
finally
EnableFsRedirection(OldState);
end;
顺便说一句,ArchitecturesInstallIn64BitMode
not/cannot 将 Inno Setup 运行 作为 64 位应用程序。 Inno Setup 无论如何都是 32 位应用程序。
我想在 Inno Setup 的 ssPostInstall
步骤中使用 PowerShell(64 位版本),但它总是打开 32 位 PowerShell。
如您在我的脚本中所见,我的 Inno Setup 配置为 64 位应用程序。 当我开始设置时,我可以在任务管理器中看到它是 运行 作为 32 位应用程序
另外,将要打开的 PowerShell 是 32 位模式。
这是我的 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 Setup 打开 64 位 PowerShell?
如果要允许 Pascal Script 代码函数使用 64 位 System32
文件,请使用 EnableFsRedirection
function to disable WOW64 file system redirection.
而且你也不能用ShellExec
,你需要用Exec
function代替。
OldState := EnableFsRedirection(False);
try
ReturnCode :=
Exec('powershell.exe', '', '', SW_SHOWNORMAL, ewWaitUntilTerminated,
ErrorCode);
finally
EnableFsRedirection(OldState);
end;
顺便说一句,ArchitecturesInstallIn64BitMode
not/cannot 将 Inno Setup 运行 作为 64 位应用程序。 Inno Setup 无论如何都是 32 位应用程序。