2011-07-29 29 views
0

我現在遇到問題,現在正在爲我們的部署方案找到解鎖UNC路徑文件的解決方案。這裏是目前的情況:從UNC共享路徑中刪除遠程鎖

我們有多個文件服務器機器。我們的部署應用程序設置爲從MSBUILD放置位置部署到一組目標文件夾(使用定義的過濾器等)。這些文件共享被公司的許多用戶用來運行我們的軟件。當這些用戶打開我們的軟件時,他們爲他們使用的文件創建一個遠程讀鎖定。

我們擁有管理員帳戶來執行此操作(通過模擬)我們的部署者。我們也可以通過遠程計算機管理手動執行此操作。當我們嘗試在自動構建中自動化過程時,問題就出現了。

在我們當前的狀態下,我們嘗試使用openfiles.exe來讀取和解鎖文件(通過/ query/s // server/v),解析這些ID,然後使用該ID來移除鎖定。我們遇到的問題是openfiles.exe返回本地文件路徑與UNC文件路徑。

有沒有辦法從服務器上遠程刪除文件鎖只知道該文件的UNC路徑(而不知道它是本地路徑)?我們並不需要有權限在目標服務器上添加應用程序(因爲有很多),所以像PsExec - > Handle.exe這樣的解決方案很可能不適合我們。

在此先感謝您的幫助! -Corey

+0

不回答你的實際問題 - 但這聽起來像是一個快速下降到痛苦的世界:應用程序運行時替換應用程序*是一個很好的方法來創建討厭的討厭的heisenbugs。在同樣的情況下,我會設置應用程序以透明地從網絡共享激活部署到用戶計算機上的本地目錄。沒有文件鎖定失敗,新版本沒有部署問題,也沒有半升級混合應用程序導致的問題。 – Bevan

+1

謝謝貝文。雖然通常我會同意你的看法,但在這種情況下,我們並不在乎打破用戶。應用程序只能以只讀方式打開,如果爆炸了,我們不會特別關心它們,因爲它們只是重新打開應用程序(並且有冗餘的數據庫可以阻止它們輸入錯誤的數據)。 儘管我的首選響應是刪除共享並進行遠程部署(在我們的clickonce部署中採用1/2的方式!),但它仍然是一個很好的距離,直到優先考慮。 – Infernex87

+0

我不知道如何將UNC路徑轉換爲遠程物理路徑(這是您本質上需要的),但是您可以將其部署到唯一的文件夾名稱(YOUR_APP_1234或其他),使用'openfiles'搜索該文件夾名稱,引導該文件夾中的每個人,獲取獨佔鎖,部署並移除鎖? –

回答

0

我很確定您可以使用WMI來查詢Windows計算機上的定義的共享列表,其中包括共享名稱和本地路徑。

給予了高度集成的WMI到PowerShell中 - 而且考慮到PowerShell是容易比生WMI使用 - 它不應該太難寫一個UNC路徑轉換爲一個本地路徑的PowerShell的功能主機。

以此爲起點,檢查出PowerShell Scripting - WmiObject Win32_Share

這個腳本的目的是列出一個服務器上的共享。事實上,這段代碼將枚舉任何計算機上的共享。

如果你得到這個工作,請分享結果!

+0

我以前從來沒有使用過powershell,但它似乎並沒有壞設置一個文件,我可以處理輸出重定向從程序內讀取。我會讓你知道我找到了什麼。 – Infernex87

+0

這工作正常。通過程序的工作方式,我們實際上可以使用WMI,使用.net System.Management包裝類來執行相同的查詢。 – Infernex87