13

目标:为了支持在一台机器上可能有多个实例的 Windows 服务,使用安装项目来创建一个 MSI,它能够:

  1. 接收服务名称的用户输入
  2. 安装服务
  3. 从 1 开始序列化服务名称(以便在记录和卸载时可以使用正确的名称)

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

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

因此,虽然可以使用自定义服务名称安装服务,但该名称不会序列化,并且安装程序在卸载时最不满意。

这应该怎么做?

4

1 回答 1

9

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

于 2009-07-08T08:57:50.427 回答