通过NSIS

时间:2015-10-13 19:37:56

标签: 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

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

3 个答案:

答案 0 :(得分:2)

试试这个:

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

更多信息:PowerShell.exe Command-Line Help

答案 1 :(得分:2)

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

index()

另外,请参阅此问题: Exec vs ExecWait vs ExecShell vs nsExec::Exec vs nsExec::ExecToLog vs nsExec::ExecToStack vs ExecDos vs ExeCmd

答案 2 :(得分:2)

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

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

如果您不需要等待子流程,那么您可以按照Serge Z的建议尝试ExecShell ...