替换在客户端 PC 中打开的服务器中的 .net 应用程序
Posted
技术标签:
【中文标题】替换在客户端 PC 中打开的服务器中的 .net 应用程序【英文标题】:Replacing the .net application in server which are being open in client PC 【发布时间】:2014-06-29 21:48:03 【问题描述】:我们公司内部使用了一些 Vb.Net 应用程序。这些将托管在我们的 windows server 2012 中,并将从网络中的所有客户端计算机(windows xp、7 和 8)访问。当我们构建较新版本的应用程序时,我们将通过将旧的 exe 文件重命名为 Application1_Old.exe 来替换服务器中现有的 exe 文件,并将新文件放在 Application1.exe 的名称中。通常,即使在客户端 PC 中打开应用程序,它也允许重命名文件。一旦关闭应用程序并重新打开它,该用户将获得新功能。所以我们在客户端打开时替换.exe。
因此 Windows 服务器将允许重命名从网络或本地打开的 vb.net exe/dll 文件。此功能仅在 Windows 服务器中找到。
问题案例: 但有时这不允许重命名某些文件。但是,如果我们有时尝试对同一个文件进行尝试,它将允许。此错误不是文件特定的,也不是常规的。当出现这个错误时,我们必须在 OpenFiles 中关闭应用程序的现有连接,然后进行重命名。
我不知道这个问题什么时候会出现,什么时候不会出现。之前通过我的观察,我发现如果任何 exe 文件在任何 windows7 PC 中打开,那么它将不允许在服务器中重命名。所以我们只从那台电脑关闭了打开的连接。之后允许重命名。
后来我们将一些PC升级到了windows 8。升级后这个问题的数量增加了。我觉得它只与windows7或8有关,但不确定。某些功能可能在 win XP 中默认启用,但在 Windows 7 及更高版本中可能会禁用。 我还得到了诸如“当客户端锁定文件句柄时,我们无法重命名文件”之类的信息。但正如我之前所说,我们能够从过去几年做到这一点。那么这怎么可能呢? 有人面临同样的问题吗?如何解决此问题?现在无法替换文件可能是什么原因?
【问题讨论】:
【参考方案1】:好吧,当可执行文件在客户端计算机上运行时,您可以重命名它,我并不感到惊讶。这不是部署应用程序的推荐方式。
你应该看看clickonce deployment。这允许您部署到 Web 服务器或文件共享。然后客户端在本地安装应用程序,因此无论是否有人使用您的应用程序,您都可以执行更新。
之前提出的这个问题与您的类似:How can we overwrite EXE files while users are running them?
作为最后的尝试,您可能还想have a look at InUse.exe“为个人和管理员提供“即时”替换操作系统当前正在使用的文件的能力”
【讨论】:
InUse.exe 将仅在 PC 重新启动后替换文件,因为它使用“PendingFileRenameOperations”。如果我禁用“机会锁定”怎么办?以上是关于替换在客户端 PC 中打开的服务器中的 .net 应用程序的主要内容,如果未能解决你的问题,请参考以下文章
从 Mac 中的 ios 客户端调用 PC 中的 signalR 服务器