在安装设置项目时指定Windows服务名称

13

目标:支持在单个机器上运行多个实例的Windows服务,使用安装程序项目创建一个能够:

  1. 接收服务名称的用户输入
  2. 安装服务
  3. 序列化第1项中的服务名称(以便可以在日志和卸载时使用正确的名称)

我的最初希望是在App.config中设置服务名称(然后在ServiceInstaller实例化时检索它以进行卸载)。这似乎很天真,因为它在安装期间无法访问。

如果MyInstaller扩展了Installer,则可以调用base.Install();但是,在MyInstaller.Install()中和base.Install()之后尝试写入app.config的尝试效果不佳。

因此,虽然可以使用自定义服务名称安装该服务,但该名称未被序列化,卸载程序在卸载时会出现问题。

应该如何解决?

1个回答

9
您可以为安装程序操作指定参数,因此收集服务名称并将其作为参数传递给操作。 然后,在Installer类中,您可以重写Install()并通过base.Context.Parameters访问它。 这就是您获取值的方式。 获取该值并使用它后,将其放入stateSaver IDictionary参数中,以便如果您重写Uninstall(),则可以找出在安装时使用了什么值。

这里有一个很棒的示例,展示如何添加自定义界面和传递参数:http://www.codeproject.com/KB/install/SetupAndDeployment.aspx ,然后你可以结合这篇答案来补充完善。 - lidermin

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