2015-10-13 124 views
0

我有一个PowerShell脚本,我想静默运行。 我正在使用NSIS脚本,它仍然在提升.exe文件运行时的powershell命令提示符。通过NSIS无声运行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

+0

为什么要使用IfSilent,“SilentInstall无声”将迫使它永远是沉默的。 – Anders

回答

2

试试这个:

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

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

+0

这将在屏幕上简要显示一个控制台窗口,因为控制台窗口是在powershell进程能够隐藏之前创建的。 – Anders

+0

@Anders是的,我的坏,我应该自己检查一下。感谢您的纠正。 – beatcracker

2

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

如果您需要隐藏控制台窗口,那么您应该使用插件。 nsExec是默认安装的一部分,或者您可以使用第三方插件,如ExecDos,该插件提供更多高级功能,如标准输入法处理。

如果您不需要等待子进程,那么你可以尝试通过ExecShellSerge Z建议...