我正在寻找一种方法来找出任何 Windows 服务的命令行参数。
对于非服务进程,命令行参数可以在 Windows 任务管理器中找到,或者通过使用 WMI 以编程方式找到,如 this post 所示。 .
不幸的是,这两个解决方案不适用于由 ServiceController.Start(String[] args) 启动的 Windows 服务。方法。它们都只在命令行上显示可执行文件路径,即使传入了一些参数也是如此。
- 有什么区别 在两种情况之间(服务与 非服务流程)?
- 有没有 找出论点的方法 Windows 服务?
我还尝试创建一个简单的服务,该服务仅将它具有的任何命令行参数记录到事件日志中。我开始使用 "sc.exe start <my service> <arg1>"
并验证了 <arg1>
已写入事件日志。
但是,没有一个解决方案对我有用。我仍然只看到了可执行文件的路径。我的操作系统版本是 Windows Server 2008 R2 SP1 x64 Enterprise。
最佳答案
服务有两种类型的参数:
- 在进程启动命令行上传递的参数。您可以使用 Process Explorer 等轻松找到那些。
- 传递给 ServiceMain function 的参数.这是服务应该实现的 WIndows API。 .NET 等效项是 ServiceBase.OnStart .这是您执行
SC START \[arguments\]
时使用的内容.这与“命令行过程参数”无关。
第二种类型的参数可能只有服务本身知道,如果实现对它有任何使用,那么对于许多服务来说情况并非如此。当我们查看低级 Windows 结构(如 PEB)时,我认为 Windows 不会跟踪这一点: Process and Thread Structures (MSDN),甚至是其中未记录的部分, Undocumented functions of NTDLL .
关于c# - 如何获取 Windows 服务的命令行参数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6182801/