Why is StartInfo (ProcessStartInfo) always empty?
根据 MSDN:
如果您没有使用 Start 方法启动进程,则 StartInfo 属性不会反映用于启动进程的参数。例如,如果您使用 GetProcesses 获取计算机上运行的进程数组,则每个进程的 StartInfo 属性不包含用于启动进程的原始文件名或参数。
好的,这完全有道理。我的问题是为什么即使您使用 Process.Start() 这些参数也是空白的?
例如:
1
2 3 4 5 6 7 8 |
Dim startInfo As New ProcessStartInfo("firefox.exe")
startInfo.Arguments ="www.stackoverflow.com" startInfo.WindowStyle = ProcessWindowStyle.Minimized Process.Start(startInfo) For Each proc As Process In Process.GetProcessesByName("firefox") Debug.Print(String.Format("ProcessID={0}; Arguments={1}", _ proc.Id, proc.StartInfo.Arguments)) Next proc |
在这种情况下,即使我提供了参数,该属性仍然是空的:
替代文字 http://www.sg-squared.com/images/startinfo.png
什么给了?
Process.StartInfo 似乎总是为空!!!
我得到了整个正在运行的进程列表并尝试在 StartInfo 中转储值,但是所有 100 个进程的 StartInfo 字段都是空的。
来自 MSDN:
“如果你没有使用Start方法启动进程,StartInfo属性不会反映启动进程所使用的参数。例如,如果你使用GetProcesses获取计算机上运行的进程数组,每个进程的 StartInfo 属性不包含用于启动进程的原始文件名或参数。”
您现在必须使用 WMI 来获取该信息。
您仍在执行 GetProcess,因此它继续以相同的方式工作。您启动它的事实并没有什么不同。
Process.Start(…) 返回您启动的进程。我希望如果您检查 StartInfo 属性,它将被填充。
您从 GetProcessesByName 获得了不同的 Process 实例,该实例属于 MSDN 上语句的后一种情况。
呃,这很令人沮丧。我认为他们可能会使该文档更清晰一些,因为它很容易阅读为”如果您确实使用 Process.Start 则该信息将可用”。
我想我还是得用 WMI,嗯。
原创文章,作者:ItWorker,如若转载,请注明出处:https://blog.ytso.com/269815.html