我目前正在开发一个Windows服务(启动这是一件好事)。 最大的问题是如何在start参数字段中获取参数(不用手册)。
所以我希望看到的是以下内容。安装服务后,如果发生以下情况,我希望如此。
安装服务并设置启动参数。
如何做这样的事情(已经在浏览StackOverflow,但它不符合我的要求)
我提出问题的原因如下:该服务是GUI和接收后端之间的通信层的一部分。如果后端位置不同(例如,另一个IP地址),则服务需要相应地具有新地址。
如果您想了解更多信息,请询问(如果某些内容不符合要求,请不要将帖子打下来')')
提前致谢
答案 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" });