2010-07-29 223 views
2

背景:如何在用戶運行EXE文件時覆蓋EXE文件?

我們公司內部用戶的運行我們在10-20 Windows終端服務器的.Net程序。該 可執行文件都存儲在運行Windows 2003的一些終端服務器的中央文件服務器上運行的是Windows 2003和一些正在運行2008

問題:

當我們發佈一個新版本的程序中,我們重命名了可能被鎖定的文件(EXE,DLL's等),然後我們將文件的較新版本複製到適當的位置。直到我們開始引入windows 2008終端服務器之前,這工作完美無缺。現在,如果2008年WTS之一的用戶正在運行該程序,那麼文件被鎖定的方式甚至不能重命名。

問題

  • 有沒有辦法重命名鎖定 文件?

  • 有沒有一種方法可以禁用2008年的這個新功能,它們在運行時鎖定EXE文件?

  • 有沒有更好的解決方案?

回答

3

我們的問題原來是因爲Windows文件共享中一個名爲「Opportunistic Locking」的新功能。當兩臺服務器都是2008年時,目前不可能關閉此功能。

我們目前有一個案例隨微軟尋找其他解決方案並工作一輪。目前傾向於使用DFS。

+1

Microsoft爲Windows 7和Windows 2008 R2發佈了[修補程序](http://support.microsoft.com/kb/2622136),以防止共享中使用的文件被鎖定。我不確定此更新是否已集成到任何Service Pack中。 – Frankenstein 2015-01-27 18:26:32

3

不是。如果某個文件被鎖定,則該文件被鎖定,除非持有該鎖的進程釋放該文件或該用戶的網絡共享連接斷開連接,否則無法對該文件做太多處理。

您應該切換到ClickOnce部署,而不是從網絡共享運行可執行文件。除了描述的更新問題之外,從網絡共享運行對代碼訪問安全性有影響,並且會對應用程序的初始負載產生性能影響。

+1

對文件進行重命名並不總是包含文件的操作,而只是對應的目錄。只有打開文件才能進行獨佔訪問時,重命名是不可能的。 – Oleg 2010-07-29 17:39:00

+0

這是正確的。在你的情況下,它似乎也是這種情況。 :-) – 2010-07-29 17:55:15

+1

我們之前在我們的終端服務上嘗試過ClickOnce,不幸的是,ClickOnce在終端服務環境中並不是非常可靠。 – jColeson 2010-08-17 16:14:18

1

一般來說,在Windows 2008終端服務器上重新命名鎖定文件與從第一個Windows NT 3.1開始的Windows NT的所有先前版本完全相同。

也許你有用於文件重命名的程序有問題。您可以直接在資源管理器中直接在舊操作系統中執行此操作但可以重命名文件CMD.EXE。剛開始cmd.exe並嘗試rename命令。

+0

我們在TFS構建定義中使用Exec命令來執行重命名命令。我的理解是,Exec命令將我們的命令直接傳遞給cmd.exe。 – jColeson 2010-07-29 17:48:42

+0

我不知道你使用哪個Exec命令或Exec.exe程序。只需啓動「cmd.exe」並輸入「rename」\\ Server \ share \ Dir \ my.exe「Old.exe」即可。你可以通過網絡來做到這一點。 – Oleg 2010-07-29 18:30:47

+0

我們的團隊基礎服務器中有一個腳本,可以使我們的構建自動化。執行任務是其中的一部分。不幸的是,手動啓動cmd.exe和調用重命名也不起作用。 我同意大部分意見,它*應該*工作,但事實並非如此。也許我應該打電話給微軟支持。 – jColeson 2010-07-29 20:07:58