我正在寻找一种方法来找出任何 Windows服务的命令行参数。
对于非服务进程,可以在Windows任务管理器中找到命令行参数,也可以使用WMI以编程方式查找this post。
不幸的是,这两种解决方案不适用于由ServiceController.Start(String[] args)方法启动的Windows服务。它们都只在命令行中显示可执行文件路径,即使传入了一些参数。
我还尝试创建一个简单的服务,只记录它对事件日志的任何命令行参数。我使用"sc.exe start <my service> <arg1>"
启动了它,并验证了<arg1>
已写入事件日志。
然而,没有一个解决方案对我有用。我仍然只看到了可执行文件的路径。我的操作系统版本是Windows Server 2008 R2 SP1 x64 Enterprise。
答案 0 :(得分:7)
服务有两种类型的参数:
SC START \[arguments\]
时使用的内容。这与“命令行进程参数”无关。第二种类型的参数可能只有服务本身知道,如果实现使用它,而许多服务则不然。当我们查看PEB: Process and Thread Structures (MSDN)等低级Windows结构时,我不认为Windows会跟踪这一点,即使是未记录的部分, {{ 3}}
答案 1 :(得分:4)
您可以找到服务EXE文件详细信息并进行编辑,或者只查看服务的注册表项中的命令行选项。你会在
下找到HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\services
如果您决定更改此窗口,请务必重新启动服务窗口,因为它不会重新读取。
答案 2 :(得分:2)
答案 3 :(得分:2)
服务进程未作为常规EXE文件启动。更重要的是,服务进程可能只是一个.dll文件。请参阅: Windows service (维基百科)。
许多出现在Windows任务管理器的进程列表中,通常使用SYSTEM,LOCAL SERVICE或NETWORK SERVICE的用户名,但并非所有具有SYSTEM用户名的进程都是服务。其余的服务通过svchost.exe作为DLL加载到内存中运行。
只需覆盖ServiceBase.OnStart(string[] args)
方法即可。看更多:
ServiceBase.OnStart(String[]) Method (MSDN)