【发布时间】:2011-07-29 20:26:24
【问题描述】:
我现在无法为我们的部署方案找到解锁 UNC 路径文件的解决方案。这是目前的情况:
我们有多个文件服务器机器。我们的部署应用程序设置为从 MSBUILD 放置位置部署到一组目标文件夹(使用定义的过滤器等)。公司的许多用户使用这些文件共享来运行我们的软件。当这些用户打开我们的软件时,他们会在他们使用的文件上创建一个远程读取锁。
我们有管理员帐户来执行此操作(通过模拟)我们的部署者。我们也可以通过远程计算机管理手动执行此操作。当我们尝试在我们的自动构建中自动化该过程时,问题就出现了。
在当前状态下,我们尝试使用 openfiles.exe 读取和解锁文件(通过 /query /s //server /v),解析 ID,然后使用 ID 解除锁定。我们遇到的问题是 openfiles.exe 返回本地文件路径与 UNC 文件路径。
有没有办法从只知道该文件的 UNC 路径(而不知道它的本地路径)的服务器上远程删除文件锁?我们不一定有权在目标服务器上添加应用程序(因为有很多),因此 PsExec -> Handle.exe 等解决方案很可能对我们不起作用。
提前感谢您的帮助! -科里
【问题讨论】:
-
不回答您的实际问题 - 但这听起来像是快速陷入痛苦的世界:在应用程序运行时替换应用程序的各个部分是一种非常好的方法创建讨厌的讨厌的海森虫。在同样的情况下,我将应用程序设置为在激活时从网络共享透明地部署到用户计算机上的本地目录。没有可破解的文件锁定,没有新版本的部署问题,也没有半升级的混合应用程序导致的问题。
-
谢谢贝文。虽然通常我会同意你的观点,但在这种情况下,我们并不关心破坏用户。该应用程序以只读方式打开,如果它爆炸了,我们并不特别在意,因为他们只会重新打开应用程序(并且有 DB 冗余阻止他们输入错误数据)。虽然我的首选反应是删除共享并远程部署(我们的 clickonce 部署有 1/2 的方式!),但在优先考虑之前仍然有很长的距离。
-
我不知道将 UNC 路径转换为远程物理路径(这是您本质上需要的)的方法,但您可以部署到唯一的文件夹名称(YOUR_APP_1234 或其他名称),搜索该文件夹名称使用
openfiles,启动该文件夹中的每个人,获取其上的排他锁,部署并移除锁?
标签: c# filesystems locking