2012-01-20 63 views
2

我想執行第三方程序(在我的情況下是VLC),沒有任何窗口在Windows中彈出。我正在運行我的java程序作爲一個Windows服務工作正常,但是當我使用Runtime.exec()啓動VLC時,無論我做什麼,都會彈出一個窗口。 VLC有一些命令行參數可以阻止GUI,但是會彈出一個黑色的控制檯 - 效果並不好。Windows:啓動一個隱藏的新進程(無窗口)

所以:任何想法如何從Java啓動一個外部程序,以便沒有可見的窗口顯示出來? (它在Mac OS X中工作得很好,我假設Linux將是相同的)

我知道有一種方法可以將libVLC直接集成到您的Java程序中,但該選項對我無效。

+0

*「..直接將'libVLC'集成到您的Java程序中,但該選項對我不起作用。」*看起來您最好修復這個問題。 –

+0

這是一個許可問題。將被迫發佈我所有的代碼在GPL,這不幸是不是一種選擇:( – Daniel

回答

1

可能有比這更好的解決方案,但是這個應該工作。

如果您安裝了Windows腳本(Win98及更新版本的標準),請將以下行保存爲.vbs文件(例如invisible.vbs)。

CreateObject("Wscript.Shell").Run """" & WScript.Arguments(0) & """", 0, False 

該腳本可以讓你用下面的命令隱形運行任何.bat文件:

wscript.exe "C:\Path\To\File\invisible.vbs" "C:\Path\To\Another\File\BatFile.bat" 

此基礎上cheeken's答案,因爲它可以讓你隱藏CMD控制檯。您所要做的就是創建一個.bat文件,其中包含start vlc

注意:如果使用此腳本執行.bat文件,它必須關閉自身,並且不能拋出導致掛起的錯誤。如果這樣做,它會一直存在,直到關閉或直到您通過任務管理器關閉它。

+0

這是一個非常討厭的解決方法,但它的工作原理(我沒有得到'.bat'版本的工作,而是直接從vbs腳本運行'vlc.exe'並帶有'--intf = rc'參數) 。Thanks for many !! – Daniel

+0

一些更多細節我如何得到它的工作:一個以此爲內容的vbs文件:'CreateObject(「Wscript.Shell」)。運行「」「C:\ Program Files \ VideoLAN \ VLC \ vlc .exe「」--intf = rc「&WScript.Arguments(0)&」「」,0,False,然後通過Runtime.getRuntime().exe執行它(「cscript.exe \」C:\ \ test.vbs \」 \「 - rc-host = 127.0.0.1:34123 \」「);'。完全按照預期工作(在這種情況下打開vlc telnet遠程控制界面)。再次感謝! – Daniel

+0

還有一個問題:你知道如何從已啓動的程序中獲取標準嗎?似乎就像在路上迷路了... – Daniel

0

不要直接在您的控制檯命令中調用VLC二進制文件,請嘗試針對該命令調用start(即start c:\vlc.exe)。

請注意,此調用將立即返回(因此,如果您的應用程序依賴於返回的調用來確定VLC何時終止,則必須以其他方式產生)。

+0

如果你需要'開始'調用返回時,VLC終止,使用'/ WAIT'選項。 – Jeffrey

+0

我試過了,不起作用'start'是cmd控制檯的一個功能,而不是一個你可以執行的文件,我也嘗試過'cmd/c start vlc'。Works,但後來我看到了cmd控制檯而不是vlc控制檯。 ( – Daniel