通过NSIS静默运行Powershell

通过NSIS静默运行Powershell,powershell,nsis,silent-installer,Powershell,Nsis,Silent Installer,我有一个powershell脚本,希望以静默方式运行。 我正在使用NSIS脚本,当运行.exe文件时,它仍在升级powershell命令提示符 有没有办法让它安静下来 !include FileFunc.nsh !include x64.nsh OutFile "script.exe" SilentInstall silent RequestExecutionLevel admin Function .onInit SetSilent silent FunctionEnd Sec

我有一个powershell脚本,希望以静默方式运行。 我正在使用NSIS脚本,当运行.exe文件时,它仍在升级powershell命令提示符

有没有办法让它安静下来

!include FileFunc.nsh
!include x64.nsh


OutFile "script.exe"
SilentInstall silent
RequestExecutionLevel admin

Function .onInit
    SetSilent silent
FunctionEnd

Section
    SetOutPath $EXEDIR
    File "script.ps1"
    IfSilent 0 +2
        ExecWait "powershell -ExecutionPolicy Bypass .\script.ps1 -FFFeatureOff"
SectionEnd

Function .onInstSuccess
    Delete "script.ps1"
FunctionEnd
这里有一个使用静默安装的示例,但我尝试它时无法使其工作<代码>http://nsis.sourceforge.net/Examples/silent.nsi

试试这个:

ExecWait "powershell -ExecutionPolicy Bypass -WindowStyle Hidden -File .\script.ps1 -FFFeatureOff"
更多信息:

试试这个:

ExecWait "powershell -ExecutionPolicy Bypass -WindowStyle Hidden -File .\script.ps1 -FFFeatureOff"

更多信息:

您可以为此尝试ExecShell,它允许通过SW_hide标志隐藏控制台:

ExpandEnvStrings $0 "%COMSPEC%"
ExecShell "" '"$0"' "/C powershell -ExecutionPolicy Bypass .\script.ps1 -FFFeatureOff" SW_HIDE
此外,请参阅此问题:

您可以尝试使用ExecShell,因为它允许通过SW_hide标志隐藏控制台:

ExpandEnvStrings $0 "%COMSPEC%"
ExecShell "" '"$0"' "/C powershell -ExecutionPolicy Bypass .\script.ps1 -FFFeatureOff" SW_HIDE
此外,请参阅此问题:

Powershell.exe是一个控制台应用程序,默认情况下,控制台应用程序会获得一个控制台窗口,NSIS silent参数对为子进程创建的控制台窗口没有影响。可以传递给子进程的参数(如
-WindowStyle Hidden
)将始终导致控制台窗口在屏幕上短时间可见,因为Windows将在子进程开始运行之前创建控制台窗口

如果你需要隐藏一个控制台窗口,那么你应该使用一个插件。是默认安装的一部分,或者您可以使用类似的第三方插件,提供更高级的功能,如stdin处理


如果您不需要等待子进程,则可以尝试…

建议的
ExecShell
,Powershell.exe是一个控制台应用程序,控制台应用程序默认会获得一个控制台窗口,NSIS silent参数不会影响为子进程创建的控制台窗口。可以传递给子进程的参数(如
-WindowStyle Hidden
)将始终导致控制台窗口在屏幕上短时间可见,因为Windows将在子进程开始运行之前创建控制台窗口

如果你需要隐藏一个控制台窗口,那么你应该使用一个插件。是默认安装的一部分,或者您可以使用类似的第三方插件,提供更高级的功能,如stdin处理


如果您不需要等待子进程,则可以尝试…

建议的
ExecShell
为什么要使用IfSilent,“sileninstall silent”将强制它始终保持静默。为什么要使用IfSilent,“sileninstall silent”将强制它始终保持静默。这将在屏幕上短暂显示控制台窗口,因为控制台窗口是在powershell进程能够隐藏它之前创建的。@Anders是的,我的错,我应该自己检查一下。谢谢更正。这将在屏幕上短暂显示一个控制台窗口,因为控制台窗口是在powershell进程能够隐藏它之前创建的。@Anders是的,我的错,我应该自己检查一下。谢谢你的更正。