这个问题的标题可能有点笨拙,但这是情况:
我在我的服务器上部署了一个.NET Web项目.它还处于测试阶段,因此发布了大量的释放和重新发布.
我还在同一个VS解决方案(称为“admin.exe”)中编写了一个C#可执行文件,该解决方案在服务器的后台运行,定期执行某些业务规则完整性检查并对数据库中的警告表进行适当的插入.
问题是:部署此应用程序的最佳方式是什么,以便每当我发布新版本时它都会更新?它应该在两个版本之间一直运行,所以理想情况下我想要某种设置,其中shutdown-deploy-startup过程涉及尽可能少的步骤.
谢谢!
编辑 – 赏金开始了
到目前为止给出的答案是有用和有趣的,但没有为我提供一个清晰,简洁和优雅的解决方案.请不要假设我对部署项目有广泛的了解,因为我没有.赏金给能够提供以下解决方案的人:
>发布最新版本的网站;
>关闭服务器上运行的任何admin.exe实例;
>更新admin.exe;
>启动admin.exe;
>以上所有内容应优先一步完成,或尽可能少的步骤,因为它将在产品的整个生命周期内重复进行;和
>以上所有内容均应优先完成,无需安装任何第三方软件.
谢谢您的帮助!
次要编辑 – 澄清
我认为到目前为止提供的很多解决方案都高估了问题的复杂性,所以让我澄清一下:所有要部署的东西,只需要部署在一台计算机上,也很高兴Visual Studio可以使用所有源代码.我只需要(1)将网站发布到web文件夹,(2)关闭,重新安装并重新启动同一服务器上的admin.exe.有没有一个简单的方法一步到位?是否可以使用VS部署项目完成?
解决方法
我有一个管理员Web应用程序作为命令行应用程序的前端 – 与您正在做的略有不同,但相同的解决方案应该工作.
只需在管理员Web应用程序中添加对控制台项目的引用即可.即使您没有在控制台项目中调用任何方法,该引用也会导致在您发布管理网站时重建和上载控制台应用程序.
添加到Web应用程序的简单启动/停止页面负责第2步和第2步. 4 – Mine调用Process.Start()/ Process.Kill(),尽管您显然可以选择更干净的关闭,具体取决于admin.exe的设置.
下面是我的开始/停止页面中的代码 – 我将它们设置为Web服务方法(以方便您可能不需要的某些监视),但它们应该可以通过简单的按钮单击方法调用.请注意,服务帐户需要运行/停止进程的权限 – 在开发框中,最简单的选项是将iis设置为以管理员用户身份运行,而不是默认服务帐户.
private void KillProcess(string name) { var binpath = Server.MapPath("~/bin"); var pp2 = Process.GetProcesses(); var pp = from p in pp2 where p.ProcessName.Contains(name) && !p.ProcessName.Contains("vshost") select p; foreach (var p in pp) { p.Kill(); } } [WebMethod] public void StartQueueRunner() { var binpath = Server.MapPath("~/bin"); System.Diagnostics.Process.Start(Path.Combine(binpath,"TwoNeeds.QueueRunner.exe")); } [WebMethod] public void StartQueueRunner() { var binpath = Server.MapPath("~/bin"); System.Diagnostics.Process.Start(Path.Combine(binpath,"TwoNeeds.QueueRunner.exe")); }