能够部署必须更新的Windows服务的一些最佳实践是什么?针对Windows服务的C#ClickOnce部署?
我有一个Windows服务,我将部署,但在测试过程中可能需要一些调试和新版本。处理这个问题的最好方法是什么?理想情况下,我希望为Windows服务找到ClickOnce风格的部署解决方案,但我的理解是,这不存在。对于Windows服务,我可以最接近ClickOnce的是什么?
能够部署必须更新的Windows服务的一些最佳实践是什么?针对Windows服务的C#ClickOnce部署?
我有一个Windows服务,我将部署,但在测试过程中可能需要一些调试和新版本。处理这个问题的最好方法是什么?理想情况下,我希望为Windows服务找到ClickOnce风格的部署解决方案,但我的理解是,这不存在。对于Windows服务,我可以最接近ClickOnce的是什么?
由于服务是无论如何长时间运行,使用ClickOnce部署的风格可能是不可行的 - 因为只有ClickOnce的更新,当你启动应用程序。服务通常只会在机器重新启动时启动。
如果您需要服务的自动更新,那么您最好的选择可能是将某些东西手动编码到服务中,但是我几乎可以解决所有解决方案的问题:大多数安装过程需要一定程度的用户交互(如果只是为了绕过UAC),所以我无法想象这会导致一个答案,不涉及在某个时刻在屏幕前获取登录用户。
可能正常工作的一个想法是活动目录部署(或一些类似的等价物)。如果您的服务是通过标准MSI类型的安装程序部署的,则AD允许您以静默方式更新应用程序,作为计算机策略的一部分。我怀疑你不得不强制服务器刷新AD策略(通过从控制台重新启动或使用gpupdate
),但除此之外,它应该是一个不干涉的部署。
我会建议使用这个的“插件”的方法,即,使用Proxy Design Pattern
。
虽然使用这种模式,一个独立的线程可以验证经更新的文件夹。您需要在组件部署中使用ShadowCopy
。当您的服务更新线程遇到您的服务的新版本时,它应该卸载当前生产装配并加载新版本,而不停止服务本身。更!如果程序集中没有破坏代码,您的服务不应该注意到这种差异。
+1。类似于这个问题的答案:http://stackoverflow.com/questions/4002462/how-can-i-write-a-java-application-that-can-up-date-itself-at-runtime/4002465#4002465 – 2010-10-28 06:15:25
我会建议创建一个正常的安装项目,并在该安装项目中添加windows服务项目输出。
欲了解更多信息,请参阅http://support.microsoft.com/kb/816169。
我有一个系统,我们在这里工作,似乎很好地与服务功能。我们部署的系统在任何时候都有大约20-30个服务。在工作中,我们使用一个名为TopShelf你可以在这里找到它http://topshelf-project.com/
基本上TopShelf处理大量的业务相关的东西的产品。从服务的cmd行安装,卸载等。其中一个非常有用的功能是作为调试控制台运行的能力。您创建一个服务,并使用不同的cmd行开始,您可以将其作为控制台运行以查看服务的输出。我们在该软件中添加了一项自定义功能,可让我们提前配置配置文件。基本上我们的配置文件配置了一些东西,如日志记录,资源位置等,以便我们可以控制所有这些,而无需重新发布任何代码。我们所要做的就是运行一个命令像
d:\ SERVICES \ ServiceName.exe Core.Profiles.Debug 或
d:\ SERVICES \ ServiceName.exe Core.Profiles。生产
获得不同的日志配置。
我们的构建脚本为我们的每项服务创建install.cmd和uninstall.cmd脚本,我们所做的只是将文件复制到服务器并运行脚本。如果我们想看到调试输出,我们停止服务并双击exe文件,我们得到一个控制台来读取所有输出。
还有一件事我们没有使用,因为它没有必要是顶棚的概念(这里有关于这个网站的文档)。这使您可以更新服务而无需“重新启动”,但您仍然需要手动复制文件,除非您为此创建自动化系统。
但是,我的建议,如果你需要100%的服务可用性是有一个冗余的系统。无论您如何配置服务以进行更新,都无法避免硬件故障导致停机而无需自动故障转移系统。如果所述系统就位,我建议的更新策略是关闭1个节点,更新,测试,打开关闭另一个节点,更新,测试并重新打开第二个节点。当然你可以用一个简单的脚本来做到这一点。这可能是一个比你需要的系统更复杂的系统,但是如果你不能在5秒钟内完成一个简单的重启服务,那么你确实需要一些系统来处理硬件问题,因为我可以保证它最终会发生。
另见http://stackoverflow.com/questions/4002462/how-can-i-write-a-java-application-that-can-update-itself-at-runtime/4002465#4002465 – 2010-10-28 06:15:54