2011-05-31 30 views
6

我正在尋找一種方法來找出任何 windows服務的命令行參數。如何獲取Windows服務的命令行參數?

對於非服務進程,可以在Windows任務管理器中找到命令行參數,或者使用WMI以編程方式找到命令行參數,如post所示。

不幸的是,這兩個解決方案不適用於由ServiceController.Start(String[] args)方法啓動的Windows服務。他們兩人只顯示在命令行的可執行文件的路徑,即使一些參數沒有成交。

  1. 有人能解釋這一差別 兩者之間的場景(服務V.S. 非服務過程)?
  2. 是否有 方法來找出 的Windows服務的參數?

UPDATE:

我也嘗試創建一個簡單的服務,只是記錄它在事件日誌中的任何命令行參數。我開始使用"sc.exe start <my service> <arg1>"並驗證<arg1>已寫入事件日誌。但是,沒有任何解決方案爲我工作。我所看到的仍然只是可執行文件的路徑。我的操作系統版本是Windows Server 2008 R2 SP1 x64企業版。

回答

7

有對服務

獲得通過的進程啓動命令行
  • 參數兩類參數。你可以輕鬆使用Process Explorer等。
  • 傳遞給ServiceMain function的參數。這是服務應該實現的WIndows API。 .NET等價物是ServiceBase.OnStart。這是當您執行SC START [參數]時使用的內容。這與「命令行過程參數」無關。

第二種類型的參數只有服務本身才知道,如果實現使用它,而許多服務不是這種情況。我不認爲Windows在跟蹤PEB:http://msdn.microsoft.com/en-us/library/ms684855(v=VS.85).aspx等低級窗口結構時,不會記錄這些信息,即使是其中的無證部分http://undocumented.ntinternals.net/UserMode/Undocumented%20Functions/NT%20Objects/Process/PEB.html

+0

謝謝你的回答,西蒙。你也許是對的。我無法從內部郵件列表中獲得更好的答案。可能有一些不明智的方法可以解決這個問題,但我檢查了SCM API,它似乎沒有幫助。 – 2011-06-09 22:02:53

2

嘗試Procexp(ProcessExplorer)應用程序從sysInternals

這是隻喜歡任務管理器。它列出了所有正在運行的進程選擇您的服務並查看其屬性。

+0

Process Explorer的下載鏈接:http://live.sysinternals.com/ procexp.exe – hackworks 2011-05-31 04:04:56

+0

我實際上曾嘗試過procexp.exe,它也顯示了任務管理器顯示的相同的東西。我應該提到也嘗試過。謝謝你的方式。 – 2011-05-31 16:54:56

+0

我檢查了一些服務Process Explorer顯示命令行參數 – 2011-06-01 04:35:44

2
  1. 服務進程不像往常一樣運行exe。更重要的是,服務過程可能只是.dll文件。參見:http://en.wikipedia.org/wiki/Windows_service

    許多出現在Windows任務管理器的進程列表中,通常使用用戶名SYSTEM,LOCAL SERVICE或NETWORK SERVICE,儘管並非所有具有SYSTEM用戶名的進程都是服務。剩下的服務通過svchost.exe作爲加載到內存中的DLL運行。

  2. 只需重寫ServiceBase.OnStart(string [] args)方法。查看更多: http://msdn.microsoft.com/en-us/library/system.serviceprocess.servicebase.onstart.aspx

+0

謝謝,但我的意思是詢問如何確定任何windows服務的命令行選項,而不是我創建的命令行選項,所以我無法重寫像#2中所述的方法。我也在尋找兩種情況之間的區別,爲什麼在交互式過程中我可以看到參數,但對於我不能的服務。 – 2011-05-31 16:57:36

4

您可以找到EXE服務細節,編輯或只是看到在服務註冊表項的命令行選項。你會發現,在

HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\services 

一定要重新啓動服務窗口,如果你決定改變這個,因爲它不會重新讀取直播。

+0

感謝您的提示,但即使此註冊表也不顯示Windows服務的命令行參數。最接近的鍵是「ImagePath」,它顯示了服務的可執行文件的路徑,如任務管理器,Procexp.exe和我編寫的程序。 – 2011-06-01 05:30:31

+1

我至少在一些服務上見過,在ImagePath的結尾有命令行參數。例如: ImagePath =「c:\ mongo \ mongod.exe --dbperdirectory --dbpath = c:\ data \ mongo」 – 2011-06-01 15:21:40

+1

謝謝,正是我需要的! – timothyclifford 2012-06-26 23:57:36