C# - 服务如何设置启动参数

C# - Services how to set the start parameters

我目前正在开发一项 windows 服务(该服务已启动,这是一件好事)。 最大的问题是如何在开始参数字段中获取参数(当然不用手动操作)。

所以我想看到的是以下内容。安装服务后,如果发生以下情况,我希望它。

服务已安装并设置了启动参数。

怎么会做这样的事情(已经在浏览 Whosebug 但它不符合我的要求)

我问这个问题的原因如下:该服务是 GUI 和接收后端之间通信层的一部分。如果后端位置不同(例如另一个 IP 地址),则服务需要相应地具有新地址。

如果您想了解更多信息,请询问(如果有问题,请不要按下 post 'just ask :)')

提前致谢

你的问题更新后,我明白了你想要完成的事情。据我目前所知,不使用注册表是无法设置这些启动参数的。您必须从服务控制台或使用安装程序手动执行此操作。当您查看涵盖 ServiceBase.OnStart (MSDN ServiceBase.OnStart method) 的 MSDN 页面时,它清楚地指出:

Process initialization arguments for the service in the OnStart method, not in the Main method. The arguments in the args parameter array can be set manually in the properties window for the service in the Services console. The arguments entered in the console are not saved; they are passed to the service on a one-time basis when the service is started from the control panel. Arguments that must be present when the service is automatically started can be placed in the ImagePath string value for the service's registry key (HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\). You can obtain the arguments from the registry using the GetCommandLineArgs method, for example: string[] imagePathArgs = Environment.GetCommandLineArgs();

问题是您在删除服务时仍然需要跟踪这些注册表设置。 因此,此处提供的 link ("Am I running as a service") 也可能有所帮助。

使用sc.exe:

c:\>sc config <myservice> binPath="\path\to\myservice.exe -param -param"

在您的 OnStart() 或您的服务线程中使用如下内容:

string myArg = ConfigurationManager.AppSettings["MyArg"]

您在 App.Config 中添加了

<appSettings>
  <!-- My keys -->
  <add key="MyArg" value="xxx"/>
</appSettings>

通过使用 System.ServiceProcess ServiceController Start(String[]) 方法启动一个 Windows 服务传递参数,如下所示:

ServiceController sc = new ServiceController("BDESVC");
sc.Start(new string[] { "argValue" });