如何在用户运行时覆盖EXE文件?

时间:2010-07-29 17:27:36

标签: deployment windows-server-2008 tfsbuild terminal-services

背景

我们公司的内部用户在10-20台Windows终端服务器上运行我们的.Net程序。该 可执行文件都存储在运行Windows 2003的中央文件服务器上。某些终端服务器正在运行Windows 2003,有些正在运行2008.

的问题:

当我们发布其中一个程序的新版本时,我们重命名了可能被锁定的文件(EXE,DLL等),然后我们将该文件的较新版本复制到正确的位置。在我们开始介绍Windows 2008终端服务器之前,这种方式完美无瑕。现在,如果其中一个2008 WTS上的用户正在运行该程序,那么这些文件将被锁定,甚至无法重命名。

问题

  • 有没有办法重命名锁定 文件?

  • 有没有办法禁用2008年在运行时锁定EXE文件的新功能?

  • 有更好的解决方案吗?

3 个答案:

答案 0 :(得分:3)

不是真的。如果文件被锁定,它被锁定,除非持有锁的进程释放它或者该用户的网络共享连接断开连接,否则您无法对该文件做太多工作。

您应切换到ClickOnce部署,而不是从网络共享运行可执行文件。除了您描述的更新问题之外,从网络共享运行会对代码访问安全性产生影响,并对应用程序的初始负载产生性能影响。

答案 1 :(得分:3)

我们的问题原因是Windows文件共享中的一项名为“Opportunistic Locking”的新功能。当两台服务器都是2008年时,目前无法关闭此功能。

我们目前正在与微软一起寻找其他解决方案并开展工作。目前倾向于使用DFS。

答案 2 :(得分:1)

一般情况下,在Windows 2008终端服务器上重命名锁定文件应该没有问题,就像从第一个Windows NT 3.1开始的所有以前版本的Windows NT一样。

您可能对用于文件重命名的程序有问题。您可以直接在资源管理器中在旧操作系统中执行此操作,稍后不再执行此操作但是可以在CMD.EXE中重命名文件。只需启动cmd.exe并尝试rename命令。