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

标签 c# .net windows service

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

对于非服务进程,命令行参数可以在 Windows 任务管理器中找到,或者通过使用 WMI 以编程方式找到,如 this post 所示。 .

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

  1. 有什么区别 在两种情况之间(服务与 非服务流程)?
  2. 有没有 找出论点的方法 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/

相关文章:

.net - Windows 上是否有 Valgrind for .Net 的等价物?

c# - 如何使用多个条件和 LINQ 过滤列表中的数据?

c# - 从 ASP.NET Controller 返回动态 jsonobject

c# - 内部 StackPanel 不可见

windows - 运行以 utf-8 保存的 scala 脚本会出错

c++ - 我可以一次将整个 NTFS 目录树读入 RAM 吗?

c# - 使用渲染器(世界空间)(Unity)在游戏对象周围绘制边界矩形(屏幕空间)

c# - 什么时候在 C# 中使用字典?

c# - 查找 CultureInfo 的资源

.NET - 如何从对象集合中找到最高公共(public)基类