我正在寻找一种方法来找出任何Windows服务的命令行参数。
对于非服务进程,命令行参数可以在Windows任务管理器中找到,或者通过使用WMI以编程方式查找,如this post中所示。
遗憾的是,这两种解决方案不适用于由ServiceController.Start(String[] args)方法启动的Windows服务。它们都只显示命令行上的可执行文件路径,即使传入了一些参数。
我还尝试创建一个简单的服务,只记录它对事件日志的任何命令行参数。我开始使用"sc.exe start <my service> <arg1>"
并验证<arg1>
已写入事件日志。
但是,没有一个解决方案对我有用。我仍然只看到了可执行文件的路径。我的操作系统版本是Windows Server 2008 R2 SP1 x64 Enterprise。
服务有两种类型的参数:
SC START \[arguments\]
时使用的。这与“命令行进程参数”无关。第二种类型的参数可能只有服务本身知道,如果实现使用它,而许多服务不是这种情况。当我们看到像PEB:Process and Thread Structures(MSDN)这样的低级别Windows结构时,我不认为Windows会跟踪这一点,即使是未记录的部分,Undocumented functions of NTDLL。
您可以找到服务EXE文件详细信息并进行编辑,或者只查看服务的注册表项中的命令行选项。你会发现它
HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\services
如果您决定更改此项,请务必重新启动“服务”窗口,因为它不会重新读取它。
试试Process Explorer的Sysinternals应用程序
它就像任务管理器一样,只列出所有正在运行的进程。选择您的服务并查看其属性。
ServiceBase.OnStart(string[] args)
方法。查看更多:ServiceBase.OnStart(String[]) Method(MSDN)