【问题标题】:Removing Remote Locks from UNC Shared Paths从 UNC 共享路径中删除远程锁定
【发布时间】: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


【解决方案1】:

我很确定您可以使用 WMI 来查询 Windows 计算机以获取其定义的共享列表,其中包括共享名称和本地路径。

鉴于 WMI 与 PowerShell 的强大集成 - 并且 PowerShell 比原始 WMI 更易于使用 - 编写一个将 UNC 路径转换为主机的本地路径。

作为起点,请查看PowerShell Scripting - WmiObject Win32_Share

此脚本的目的是列出服务器上的共享。事实上,这段代码将枚举任何计算机上的共享。

如果你得到这个工作,请分享结果!

【讨论】:

  • 我以前从未使用过 powershell,但是设置一个我可以通过输出重定向处理以从程序内部读取的文件似乎并没有那么糟糕。我会告诉你我发现了什么。
  • 这很好用。通过程序的工作方式,我们实际上可以只使用 WMI,使用 .net System.Management 包装类来执行相同的查询。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-09-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-04-07
  • 1970-01-01
  • 2013-07-22
相关资源
最近更新 更多