目标:为了支持在一台计算机上可能有多个实例的Windows服务,请使用安装项目创建一个能够执行以下操作的MSI:
我最初的希望是在App.config中设置服务名称(然后在实例化ServiceInstaller时在卸载期间检索它。这似乎很幼稚,因为在安装过程中无法访问它。
如果MyInstaller扩展了Installer,它可以调用base.Install();但是,我尝试写入app.config(在MyInstaller.Install()内和base.Install()之后)是无效的。
因此,虽然可以使用自定义服务名称安装该服务,但该名称未被序列化,安装程序在卸载时最不满意。
应该怎么做?
答案 0 :(得分:9)
您可以为安装程序操作指定参数,因此请收集服务名称,并将其作为参数传递给操作。然后,在Installer
课程中,您可以覆盖Install()
并通过base.Context.Parameters
访问它。这就是你获得价值的方式。获得该值并使用它后,您将其放在stateSaver
IDictionary
参数中,这样如果您覆盖Uninstall()
,就可以找到安装时使用的值。