2015-10-13 45 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建議...