为服务安装程序添加命令行参数(C#)

5

我正在开发一个应用程序,它作为一个服务启动,但只有在命令行开关告诉它这样做时才会启动(否则会打开标准表单)。因此,在Windows启动时启动服务时,必须传递此命令行选项,否则服务将无法启动。

我希望安装程序(ServiceProcessInstaller)添加一个命令行选项,以便在启动服务时将命令行选项添加到命令中。

示例: MyService.exe -commandlineoption

我认为ServiceProcessorInstaller.Context属性就是为此而设的,但它是针对在InstallUtil上执行的参数的。

有什么建议吗?


从你的问题中不太清楚:你的应用程序是安装服务、启动服务还是两者都包括? - adrianbanks
我在考虑前者。 - Steven Sudit
抱歉造成歧义。该应用程序通常是标准的Windows窗体应用程序。但是,在Main()方法中,它会查找命令行参数。如果有一个-service命令行选项,它将启动服务。我还包括了一个安装程序类,InstallUtil会寻找它以便将服务注册到Windows中。当Windows在启动时启动服务时,服务应该带有命令行选项被调用。 - Tim
2个回答

1

当我为服务添加命令行选项时,我总是默认运行为服务。然而,我知道相反的也是可能的,因为这就是SvcHost的工作方式:它是一个EXE,始终配置为将DLL作为服务加载。


以下是Jorg提供的方法: https://dev59.com/IXRB5IYBdhLWcg3wWGAH - Steven Sudit
你链接的问题似乎是我需要的。我猜我搜索的词不对。 他们就不能简单点吗?!谢谢Steven! - Tim
Jorg得到了赞誉,但我很高兴能够引导您关注他的出色工作。 - Steven Sudit

0

每个版本只安装一次服务。听起来你在谈论启动服务时传递命令行参数。

您可以使用ServiceController.Start方法在启动服务时传递命令行参数:

using (var controller = new ServiceController("servicename")) {
    controller.Start(arg0, arg1);
}

如果是这种情况,请参见例如我的问题 https://dev59.com/IXRB5IYBdhLWcg3wWGAH - Jörg Battermann
约翰,他链接的问题解释了如何配置服务以附加参数,每当任何人启动服务时都会传递这些参数。我认为它包含了对Tim问题的答案。 - Steven Sudit
取决于情况。如果每次使用相同的命令参数,则进行配置。如果每次使用不同的参数,则使用“Start”并传递参数。 - John Saunders

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接