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

时间:2015-01-07 11:06:13

标签: windows c#-4.0 service

我目前正在开发一个Windows服务(启动这是一件好事)。 最大的问题是如何在start参数字段中获取参数(不用手册)。

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

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

如何做这样的事情(已经在浏览StackOverflow,但它不符合我的要求)

enter image description here

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

如果您想了解更多信息,请询问(如果某些内容不符合要求,请不要将帖子打下来')')

提前致谢

4 个答案:

答案 0 :(得分:3)

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

  

在OnStart方法中处理服务的初始化参数,而不是在Main方法中。可以在“服务”控制台中的服务的属性窗口中手动设置args参数数组中的参数。在控制台中输入的参数不会保存;当从控制面板启动服务时,它们将一次性传递给服务。自动启动服务时必须存在的参数可以放在服务的注册表项(HKEY_LOCAL_MACHINE \ SYSTEM \ CurrentControlSet \ Services \)的ImagePath字符串值中。您可以使用GetCommandLineArgs方法从注册表中获取参数,例如:string [] imagePathArgs = Environment.GetCommandLineArgs();

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

答案 1 :(得分:1)

使用sc.exe

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

答案 2 :(得分:0)

OnStart()或您的服务主题中使用以下内容:

string myArg = ConfigurationManager.AppSettings["MyArg"]

您在App.Config中已添加

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

答案 3 :(得分:0)

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

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