如何获取Windows服务的命令行参数?

Dua*_* Le 6 .net c# windows service

我正在寻找一种方法来找出任何 Windows服务的命令行参数.

对于非服务过程中,命令行参数,可以在Windows任务管理器如本使用WMI发现,或者通过编程.

不幸的是,这两个解决方案不适用于由ServiceController.Start(String [] args)方法启动的Windows服务 .它们都只在命令行中显示可执行文件路径,即使传入了一些参数.

  1. 有人可以解释两种情况(服务与非服务流程)之间的区别吗?
  2. 有没有办法弄清楚Windows服务的参数?

更新:

我还尝试创建一个简单的服务,只记录它对事件日志的任何命令行参数.我开始使用"sc.exe start <my service> <arg1>"并验证了<arg1>写入事件日志的内容.但是,没有一个解决方案对我有用.我看到的仍然只是可执行文件的路径.我的操作系统版本是Windows Server 2008 R2 SP1 x64 Enterprise.

Sim*_*ier 7

服务有两种类型的参数

  • 在进程启动命令行上传递的参数.您可以使用Process Explorer等轻松访问这些内容.
  • 传递给ServiceMain函数的参数.这是服务应该实现的WIndows API..NET等价物是ServiceBase.OnStart.这是您执行SC START [arguments]时使用的内容.这与"命令行进程参数"无关.

第二种类型的参数可能仅由服务本身知道,如果实现使用它,而许多服务不是这种情况.当我们看到像PEB这样的低级窗口结构时,我不认为Windows会跟踪这个:http://msdn.microsoft.com/en-us/library/ms684855(v = VS.85).aspx,甚至它的未记录部分http://undocumented.ntinternals.net/UserMode/Undocumented%20Functions/NT%20Objects/Process/PEB.html


Mic*_*edy 6

您可以找到服务 EXE 文件的详细信息并进行编辑,或者仅查看服务注册表项中的命令行选项。你会发现在下面

HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\services
Run Code Online (Sandbox Code Playgroud)

如果您决定更改此设置,请务必重新启动“服务”窗口,因为它不会实时重新阅读。