2014-10-18 149 views
0


從另一個程序(MetaTrader的),我開始一個PS腳本下載一些電子郵件:如何保持窗口打開:ShellExecuteW(0,0,「powershell.exe」,「..」,「..」,SW_SHOW)?

shl = ShellExecuteW(0,0,"powershell.exe", "-file x.ps1","..\\path\\to\\scripts",SW_SHOW); 

了幾個星期後,沒有任何問題,我看到一下子一些紅色的錯誤代碼(!)控制檯 - 但它被關閉太快返回碼(SHL)信號沒有錯誤:shl < = 32。

現在我試圖用

shl = ShellExecuteW(0,0,"powershell.exe","..","..",SW_SHOWNOACTIVATE); 
    # SW_SHOWNOACTIVATE = 4 
    # 4: Displays a window in its most recent size and position. The active window remains active. 

開始ShellExecuteW(..)但同樣控制檯消失:(

1)什麼我必須輸入,使控制檯保持打開狀態 - 對我來說手動關閉1t?
2)如何強制ShellExecuteW(..)將錯誤消息添加到錯誤文件中?

感謝和一個愉快的週末,
Gooly

PS:用ShellExecuteW(..)我重新啓動該程序後,它再次運行沒有任何錯誤?

回答

1

我認爲問題不在於ShellExecute,而是如何調用Powershell。

試試這個:

shl = ShellExecuteW(0,0,"powershell.exe", "-noexit -file x.ps1","..\\path\\to\\scripts",SW_SHOW); 
+0

謝謝,現在我記得了!我認爲就是這樣! – gooly 2014-10-18 09:13:45

1

只是爲了記錄在案,你也許會把它用在腳本的末尾添加read-host開放。

您可以通過使用抄本記錄錯誤消息(start-transcript/stop-transcript)或者只是將錯誤處理添加到您的腳本(嘗試抓住然後手動記錄)。

Regards

+0

這也是一種方式,但目前我不知道問題的存在位置,因此放置漁獲的位置。 – gooly 2014-10-18 11:25:33

+0

您應該總是附上可能在try-catch中拋出終止錯誤的語句。 現在,只需在腳本開始時添加一個「開始腳本」,然後在末尾添加「stop-transcript」,然後在您的應用程序調用它之後檢查日誌以確定引發錯誤的語句。 – Paul 2014-10-18 11:33:46

+0

保羅,劇本在幾周內沒有任何錯誤地運行。我現在又開始了,沒有變化也沒有錯誤。我只需再運行一次,希望再次發生錯誤。我想同時日誌文件會變得太大,我猜.. – gooly 2014-10-18 13:01:15

相關問題