当前位置:  开发笔记 > 编程语言 > 正文

读取另一个进程的命令行参数(Win32 C代码)

如何解决《读取另一个进程的命令行参数(Win32C代码)》经验,为你挑选了2个好方法。

我需要能够列出传递给其他正在运行的进程的命令行参数(如果有的话).我已经在系统上运行了进程的PID,所以基本上我需要确定传递给给定PID XXX的进程的参数.

我正在研究用于管理流程的Python模块的核心部分.代码在C中编写为Python扩展,并将由更高级别的Python库包装.这个项目的目标是避免依赖于第三方库,例如pywin32扩展,或者在命令行上调用'ps'或taskkill等丑陋的黑客,所以我正在寻找一种在C代码中执行此操作的方法.

我已经用Google搜索了一些,并找到了一些简短的建议,使用CreateRemoteThread()将自己注入其他进程,然后运行GetCommandLine(),但我希望有人可能有一些工作代码示例和/或更好的建议.

更新:我在CodeProject上找到了使用NtQueryProcessInformation的完整工作演示代码和解决方案:http://www.codeproject.com/KB/threads/GetNtProcessInfo.aspx - 这是不理想的,因为"不支持"直接从中剔除信息NTDLL结构,但我会忍受它.感谢大家的建议.

更新2:我通过更多谷歌搜索来挖掘不使用C++代码的C版本,并且更直接/更简洁地指出了这个问题.有关详细信息,请参见http://wj32.wordpress.com/2009/01/24/howto-get-the-command-line-of-processes/.

谢谢!



1> Jay..:

为了回答我自己的问题,我终于找到了一个完全符合我要求的CodeProject解决方案:

http://www.codeproject.com/KB/threads/GetNtProcessInfo.aspx

正如@Reuben已经指出的那样,您可以使用NtQueryProcessInformation来检索此信息.不幸的是,它不是推荐的方法,但鉴于唯一的其他解决方案似乎是招致WMI查询的开销,我想我们现在将采用这种方法.

请注意,如果在64位Windows操作系统上使用从32位Windows编译的代码,这似乎不起作用,但由于我们的模块是从目标上的源编译的,应该可以用于我们的目的.我宁愿使用这个现有代码,如果它在Windows 7或更晚的日期中断,我们可以再次看一下使用WMI.谢谢你的回复!

更新:此处说明了相同技术的更简洁和仅C(与C++相对)版本:

http://wj32.wordpress.com/2009/01/24/howto-get-the-command-line-of-processes/



2> Ironicnet..:

缓存的解决方案:http://74.125.45.132/search?q= cache: -wPkE2PbsGwJ : windowsxp.mvps.org/listproc.htm+running+process+command+line&hl=es&ct=clnk&cd=1&gl=ar&client=firefox-a

in CMD
WMIC /OUTPUT:C:\ProcessList.txt PROCESS get Caption,Commandline,Processid

or

WMIC /OUTPUT:C:\ProcessList.txt path win32_process get Caption,Processid,Commandline

另外:http: //mail.python.org/pipermail/python-win32/2007-December/006498.html

http://tgolden.sc.sabren.com/python/wmi_cookbook.html#running_processes 
seems to do the trick:

import wmi
c = wmi.WMI ()
for process in c.Win32_Process ():
  print process.CommandLine

推荐阅读
贾志军
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有