2010-12-01 264 views
1

我有一个.NET 3.5 Windows服务,有几种不同的配置/风格,即。发布,测试,调试等。我已经创建了一个安装程序包,用于构建作为msbuild脚本一部分的服务,但是我需要能够以允许每种服务风格的方式构建安装程序安装在同一台机器上。有谁知道这样做的最佳方式?在同一台PC上安装Windows服务的多个版本

感谢

回答

2

也许this article会有所帮助?

的问题

当使用反射审查ServiceInstaller 类,你会看到它 确实在 一个Win32调用CreateServiceServiceInstaller.Install方法。 CreateService将返回 ERROR_DUPLICATE_SERVICE_NAME返回 代码每当方法被调用 与serviceNamedisplayName 参数相匹配的一个 已安装服务的。这是 是什么原因导致Win32Exception为 在上述窗口中抛出并且 最终导致第二次安装 失败。您可以在CreateService 函数here上查看完整的 文档。

为了解决这个问题,所有需要 做的是在安装和 服务启动为一个已知值和 动态设置 服务名称,以确保该值是服务的每个实例不同 你安装了 。

解决方案

所有这一切需要做的就是让 确保每个服务 安装实例的名称是独一无二的。然后 您需要为您想要的每个 服务实例安装 安装目录的副本。 最后,您需要在 安装和启动期间动态设置 服务名称。这将是 便利使用app.config文件。

本文继续提供有关如何在同一台计算机上安装.NET Windows服务的多个实例的分步说明。

当然,我不禁想知道为什么正好需要在同一台机器上同时运行调试版和发行版。

+0

谢谢,这有帮助。至于为什么需要这个......不是我的想法,坦率地说,我认为这不是必要的。根据我们的高级开发人员,我们应该将其作为我们构建的一部分,尽管我不完全确定为什么! – TabbyCool 2010-12-01 14:04:47

+0

@TabbyCool:这是一个非常奇怪的要求。测试版本的发布版本是一个好主意(只是为了确保编译器优化不会引入错误),但我没有看到他们需要同时运行的理由。考虑到没有最终用户会在该配置中运行,我希望它只是使调试更加困难。如果您需要能够调试发布版本,更好的办法就是为发布版本生成PDB符号,而不是试图同时运行这两个版本。无论如何,很高兴提供帮助。 – 2010-12-01 14:08:02

2

只是想提请注意文章科迪灰色参考文献中的评论。看来作者和评论者认为使用sc更容易。exe文件如下

sc \\myserver create NewService binpath= c:\nt\system32\NewServ.exe 
相关问题