我有一个管理项目繁重处理的应用程序,需要将其转换为“Windows服务”。我需要允许运行应用程序处理的多个版本实例,这似乎是一个相当正常的要求。
我至少可以看到三种方法:
我的意图是方法#1,但是我一直在设计和特别是服务的文档中限制这些限制:
所以,问题:
注意:我通过使用方法#3来解决这个问题,所以我无法在很长时间内解决这个问题。但我认为有人可能有关于如何实施#1的信息 - 或者说这不是一个好主意的充分理由。
[编辑] 我最初有第四个选项(在硬盘驱动器上安装应用程序的多个副本),但我删除了它,因为它只是感觉,嗯,hackish 。这就是为什么我说“至少有三种方法”。
但是,除非重新编译应用程序,否则它必须动态设置其ServiceName,因此它具有上述第三个项目符号/问题的解决方案。因此,除非需要更改其安装文件的实例,否则#1应该可以正常使用目录中的 N 配置文件和指示实例应该使用的注册表项。
答案 0 :(得分:6)
虽然我无法回答您对选项#1特有的问题,但我可以告诉您选项#2对我们来说非常有效。我们希望为每个“子”服务创建一个应用程序域,以便在每个“子”服务下运行并为每个子服务使用不同的配置文件。在我们的服务配置文件中,我们存储了要启动的应用程序域以及要使用的配置文件。因此,对于每个条目,我们只需创建应用程序域,设置配置文件等,然后关闭。这种配置分离使我们能够轻松地为每个实例唯一地指定端口和日志文件位置。我们的另一个好处是我们将“子服务”编写为命令行exe,并在每个“子”服务的新线程上简单地调用AppDomain的ExecuteAssembly()。解决方案中唯一的“笨拙”是关闭,我们没有费心为它创建一个“好”的解决方案。
2012年2月更新
前段时间我们开始使用“命名”服务(如SQL Server)。我在博客的“构建Windows服务 - Part 1到Part 7”系列中详细介绍了整个过程。它们将指导您完成自行安装的命令行/ Windows服务混合。满足以下目标:
完整的Visual Studio项目模板可在本系列的最后一篇文章Building a Windows Service – Part 7: Finishing touches中找到。
答案 1 :(得分:0)
答案 2 :(得分:0)
我在项目中成功使用了选项#4,即“命名实例”。
您应用的每次安装都有自定义名称,每个安装都有自己的服务。它们是完全独立的并且彼此隔离。如果您尝试在单台计算机上多次安装MS SQL Server,则MS SQL Server正在使用此模型。