安装后的PowerShell脚本

时间:2012-12-05 17:25:02

标签: inno-setup

新手问题:我想在inno-setup安装结束时运行一个powershell脚本(.ps1)。任何人都可以给我一个提示放在哪里?我希望系统询问用户是否要运行此脚本。

哦,是的,这个脚本的作用是运行netsh.exe来打开一个端口,脚本很聪明,它从当前上下文中获取Env:username和Env:userdomain。上下文是否是运行安装程序的管理员?或者它是运行setup.exe的原始用户?

2 个答案:

答案 0 :(得分:4)

另一种方法是使用代码中的ShellExec运行脚本。

[Files]
Source: "yourPowershell.ps1"; DestDir: "{app}"; Flags: overwritereadonly replacesameversion promptifolder;

[Tasks]
Name: "runpowershell"; Description: "Do you want to run Powershell script?"

[Code]

procedure CurStepChanged(CurStep: TSetupStep);
var
  ErrorCode: Integer;
  ReturnCode: Boolean;
begin
  if CurStep = ssPostInstall then begin

    if(IsTaskSelected('runpowershell')) then begin
      ExtractTemporaryFile('yourPowershell.ps1');
      ReturnCode := ShellExec('open', '"PowerShell"', ExpandConstant(' -ExecutionPolicy Bypass -NoLogo -NonInteractive -NoProfile -WindowStyle Hidden  -File "{tmp}\YourPowershell.ps1"'), '', SW_SHOWNORMAL, ewWaitUntilTerminated, ErrorCode);

    if (ReturnCode = False) then
        MsgBox('Message about problem. Error code: ' + IntToStr(ErrorCode) + ' ' + SysErrorMessage(ErrorCode), mbInformation, MB_OK);

  end;
end;

答案 1 :(得分:2)

[Run]
.....; Description: Run Script; Flags: postinstall

(有关更多详细信息,请参阅帮助。)默认情况下,这将显示一个复选框并在原始用户的上下文下运行(尽管它取决于安装程序的运行方式)。

但您可能想重新考虑这种方法;如果您正在执行机器范围的安装,那么您应该在机器范围内打开端口。您可以使用调用WinAPIs的纯Inno代码执行此操作 - 无需PowerShell。 (这是一件好事,因为它可能没有安装。)

或者,如果您希望保持每用户设置,您应该考虑让应用程序在第一次运行时提示用户做出决定。毕竟,为什么只为您应用的众多可能用户中的一个提供选项?