簡體   English   中英

如何在C#中讀取另一個進程的命令行參數?

[英]How to read command line arguments of another process in C#?

如何獲取另一個進程的命令行參數?

使用System.Diagnostics.Process類的靜態函數,我可以獲取正在運行的進程的列表,例如按名稱:

Process[] processList = Process.GetProcessesByName(processName);

但是,無法訪問用於啟動此過程的命令行。 一個人怎么做?

如果您沒有使用Start方法來啟動進程,則StartInfo屬性不會反映用於啟動進程的參數。 例如,如果使用GetProcesses獲取在計算機上運行的一系列進程,則每個Process的StartInfo屬性不包含用於啟動該進程的原始文件名或參數。 (來源: MSDN

Stuart的WMI建議是一個很好的建議:

string wmiQuery = string.Format("select CommandLine from Win32_Process where Name='{0}'", processName);
ManagementObjectSearcher searcher = new ManagementObjectSearcher(wmiQuery);
ManagementObjectCollection retObjectCollection = searcher.Get();
foreach (ManagementObject retObject in retObjectCollection)
    Console.WriteLine("[{0}]", retObject["CommandLine"]);

如果您的目標是Windows XP或更高版本,並且可以負擔WMI的開銷,則可能是使用WMI的WIN32_Process類 (具有CommandLine屬性)查找目標進程。

Process.StartInfo返回一個ProcessStartInfo對象,該對象據稱但不一定在Arguments屬性中具有參數。

這兩個項目都是您的嗎? 您是否可以為正在嘗試檢查的過程修改源代碼,以使其具有命令行參數,而不是嘗試從該過程之外的地方讀取它們?

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM