2014-01-09 109 views
14

在linux中你可以使用命令&在後臺運行命令,在shell離線後也會一樣。我想知道是否有類似的東西爲Windows ...如何在Windows上的後臺運行命令?

+1

好問題,但應該在[SuperUser](http://superuser.com)詢問。據我所知,沒有這樣的設施。 Windows將服務用於沒有shell的後臺任務,但必須對其進行特殊編碼 - 您不能將任何命令作爲服務運行。你會得到最接近的可能是'start'命令,它啓動一個新的shell。 – paddy

+1

@paddy但是如果我使用'start',它會在我離線後立即停止運行嗎? – Louis

+1

是的,這是正確的。當您註銷時,以'start'開始的進程將被終止。所以它不適合長時間運行的遠程後臺作業。 – Anthony

回答

9

我假設你想要做的是運行一個沒有接口的命令(可能自動?)。在Windows上有一個您正在尋找什麼選項的數量:

  • 最好:把你的程序寫成windows服務。這些將在沒有人登錄到服務器時開始。他們讓您選擇用戶帳戶(可能與您自己的帳戶不同),如果失敗,他們將重新啓動。這些程序一直運行,因此您可以在特定時間或定期從其中自動執行任務。有關如何編寫Windows服務的更多信息,可以在線閱讀教程,例如(http://msdn.microsoft.com/en-us/library/zt39148a(v=vs.110).aspx)。

  • 更好:啓動命令並隱藏窗口。假設該命令是DOS命令,則可以使用VB或C#腳本來執行此操作。有關更多信息,請參見here。一個例子是:

    Set objShell = WScript.CreateObject("WScript.Shell") 
    objShell.Run("C:\yourbatch.bat"), 0, True 
    

    你還是不得不手動啓動命令或寫一個任務開始的命令。這是這一戰略最大的倒退之一。

  • 最差:使用啓動文件夾啓動該命令。這在用戶登錄到計算機時運行

希望幫助一些!

+1

如果你只有VS express,那麼這是一種創建Windows服務的方法:http://www.codeproject.com/Articles/106742/Creating-a-simple-Windows-Service – Graham

23

我相信你正在尋找的命令是start /b *command*

對於UNIX,nohup表示「不掛機」,這是不是一個後臺作業略有不同(這將是*command* &。我相信上述命令應該類似於Windows的後臺作業。

+3

問題:start/b *命令*會在我從服務器註銷後立即停止運行?是的,對不起,我是'command&'not'nohup' – Louis

+0

看到這個答案:http://stackoverflow.com/a/3382087/1751190我相信如此,但我不積極。我會自己測試它,但我現在不在Windows電腦附近。 – Oeste

+2

就像一個確認:是的,如果你註銷(如果你通過telnet連接到windows機器來運行命令),命令將會死掉。 – msb

2

您還應該查看Windows中的at命令。它會在這種情況下的後臺啓動一個特定時間的程序。

另一種選擇是使用nssm服務管理器軟件。這將包裝您作爲Windows服務運行的任何命令。