使用NGEN正确更新RemoteAPP应用程序的方法

18
我们有一个部署在RDS服务器上的Windows2008R2 RemoteAPP .NET 4.5应用程序,该程序在3个主机NLB集群中拥有约300个并发用户。
该应用程序正在积极开发中,RemoteAPP部署的程序集需要经常更新(即用新程序集替换原有程序集)。
目前我们的做法如下:
1. 在RemoteAPP服务器上更改要更改的文件名称,同时连接用户(如果文件已加载,操作系统将不允许覆盖文件), 2. 将新文件写入原文件位置, 3. 安装新程序集(未卸载旧程序集!), 4. 通过应用程序本身通知用户应用程序版本已更改,需要重新启动, 5. 逐步允许用户按照自己的节奏重启应用程序(同时重启应用程序会导致磁盘和CPU负载增加,损害服务器性能)。 对于集群中的所有主机都是这样。
然后,服务器偶尔会出现蓝屏崩溃,出现Microsoft-Windows-Kernel-Power事件ID 41关键错误 - 我高度怀疑我们的更新方法对此负有责任。
因此问题是:有什么推荐的方法可以更新RemoteAPP应用程序,并NGEN新程序集,而无需终止访问旧程序集的进程(即允许用户继续并在他们感觉需要时重新启动)。
谢谢。

你找到一个合理的答案了吗? - Marty
有没有可能实现一个Hyper-V解决方案?新版本可以部署到阴影实例中,一旦它准备好上线,IP地址就被重新分配。如果你将前端和后端分开,这也将是一个相当小的负载... - Bryan Devaney
不,我没有找到一个合理的答案来回答这个问题。相反,我们停止了对程序集进行 NGEN 编译,并增加了系统资源。自那以后蓝屏错误就没有再出现过。 - user1029848
我可能会将您的问题视为设计问题而不是技术问题。您正在尝试创建一个动态更新的应用程序,其中包含影响Windows进程状态的操作(更改dll、NGEN'ing需要停止进程状态等)。您的“始终可用”应用程序应该动态加载程序集,并具有在运行时“重新加载”它们的选项。这样,您可以部署一组程序集,对其进行NGEN处理,最后要求应用程序重新加载以完成操作。 - Soundararajan
2个回答

1

0

您可以使用通过RemoteApp发布的启动应用程序。 启动器将启动最新版本的应用程序。

例如:有一个注册表键,它是您的应用程序最新版本的路径

  1. 添加一个新文件夹C:\Program Files\myApp\1.0.26\
  2. ngen新程序集
  3. 更新注册表键以指向新文件夹
  4. 运行启动器时,启动新版本的应用程序
  5. 可选地,在不再使用旧版本时删除旧版本

RemoteApp指向C:\Program Files\myApp\startApp.exe

startApp.exe启动1.0.26\theApp.exe


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接