我们有一个 .Net 4.0 可执行文件(程序运行库) 以及使用 XCopy 部署在网络共享上的相关 dll。MyProg.exe 及其 dll 均未签名。
我们将它们安装在网络共享上,以便多个用户可以使用相同版本的程序并轻松更新程序。多年来,这对我们的许多客户来说效果很好。
对于最近的一位客户,Windows Server 2012 虚拟机上的一个文件夹被共享为网络文件夹。用户从另一台终端服务器(Windows Server 2012)运行该程序。
当我们更新程序运行库(从 1.0 升级到 2.0 版),终端服务器在重新启动之前不会运行新的可执行文件。它继续加载 1.0 版,即使该 exe 不再可用。它似乎正在运行缓存的版本我的程序.exe V1.0。
- 我尝试过的步骤:
- 关闭程序的所有实例
- 复制新的程序运行库到文件夹并覆盖文件(将 exe 版本从 1.0 更新至 2.0)
- 验证 2.0 版程序运行库从文件服务器和终端服务器的属性>>详细信息页面
- 验证我的程序使用快捷方式文件从文件服务器执行时运行(目标:\\服务器\MyProg\MyProg.exe)
- 运行相同的快捷方式文件(目标:\\服务器\MyProg\MyProg.exe)从终端服务器和我的程序.exe V1.0开始
- 改名\\服务器\MyProg到\\服务器\我的程序1并确认终端服务器无法运行快捷方式,因为该文件夹不再存在。
- 创建一个新的快捷方式文件(Traget:\\服务器\MyProg1\MyProg.exe)并确认我的程序在客户端上运行
- 重命名文件夹\\服务器\MyProg1回到\\服务器\MyProg并运行原始快捷方式文件继续加载我的程序.exe V1.0直到终端服务器重新启动。
- 我确认终端服务器上已禁用脱机文件
- 我验证了当程序在终端服务器上运行时,我无法覆盖 MyProg.exe 可执行文件。
我还能检查什么来解决为什么即使该文件不再存在仍会执行旧版本的可执行文件?
答案1
联系了 Microsoft 技术支持团队。他们提到这可能是由 SMB 的这些设置引起的。我们修改了这些设置,并将在下次更新时保留。
http://technet.microsoft.com/en-us/library/ff686200(v=WS.10).aspx
上述链接中的设置无效。
更多详细信息可帮助我们找出问题:客户端计算机是 Windows 终端服务器
此知识库文章提供了更多这方面的信息:
https://support.microsoft.com/kb/2536487
如果另一个用户在 Windows Server 2008 或 Windows Server 2008 R2 中注销远程桌面会话,应用程序可能会崩溃或无响应
症状:
从映射驱动器运行应用程序时,当另一个用户注销时,该应用程序可能会变得无响应或崩溃。例如:
- 一台服务器是文件服务器,另一台是远程会话主机服务器(终端服务器)。
- 文件服务器上的文件夹被映射以供连接到 RDS 服务器的远程用户使用。
- 映射共享上的应用程序由多个用户启动。
- 一个用户注销,这导致应用程序的其他用户遇到应用程序崩溃或无响应。
具体来说,该行为是由于应用程序的第一个用户或最后一个用户注销时引起的,具体取决于版本。Windows Server 2008 在第一个用户注销时会遇到此问题;Windows Server 2008 R2 在最后一个用户注销时会遇到此问题。
原因:
发生这种情况的原因是重定向器处理相关二进制文件的 FCB(文件控制块)。在 Windows Server 2008 中,FCB 由第一个打开文件的用户拥有,后续用户将使用此 FCB。当第一个用户注销时,FCB 将被孤立,这会导致应用程序的后续用户崩溃或无响应。在 Windows Server 2008 R2 中,FCB 由最后一个打开文件的用户拥有,如果最后一个用户注销,先前的用户将遇到此问题
解决方法:
在终端服务器上本地安装应用程序,而不是在网络共享上安装