2010-05-20 62 views
19

我有一個ClickOnce應用程序將所有舊版本保留在我的磁盤上。這是一個經常更新的內部公司應用程序,因此這對於快速擴大備份大小來說是一場災難。ClickOnce部署將離開多個版本(是,超過兩個)

根據文檔和其他堆棧 溢出的問題,它應該只留下當前和以前的版本在磁盤上。但是,每次部署項目並升級客戶端時,我都會獲得所有EXE,DLL和數據文件的另一個副本。我沒有對應用程序進行任何更改,只是在Visual Studio中再次部署。

我該如何解決這個問題?

這個問題似乎發生在Windows 7和Windows XP以及64位和32位Windows上。

我所做的是安裝版的文件夾的diff和下面的文件是不同的:

MyApp.exe.manifest 
MyApp.exe.cdf-ms 
MyDll1.cdf-ms 
MyDll2.cdf-ms 

沒有實際的可執行文件是不同的,也不是MyApp.manifestMyDll1.manifest

如何選擇。在運行時查找包含我的應用程序的其他文件夾是否安全並刪除它們?這會打破什麼?

ClickOnce只是一個明顯的神祕黑匣子?

+0

需要說明的是,您的意思是所有舊版本都保存在* client *機器上。所有版本都應保留在*部署位置*,直到/除非您刪除它們,因爲您可能在任何時候在不同版本上擁有不同的用戶。 – Jay 2010-05-20 13:10:17

+0

是的,在客戶端機器上,埋在用戶文件夾中 – Clyde 2010-05-20 13:28:05

+0

如果您在發佈設置中指定了最低要求的版本號,它是否有所幫助? – Jay 2010-05-20 14:27:41

回答

6

我想我終於明白了這一點。對於一些未知(而且不可接受的,坦率地說)的原因,如果新版本正在運行,則不會發生舊版本的清理 - 它只是在靜靜地失敗。

清理嘗試在舊版本退出時嘗試運行,但由於我重新啓動了應用程序,新版本已經啓動,阻止了清理。

此外,請注意在其他答案中提到的「清道夫服務」似乎是一個完全製造。我沒有發現任何此類服務的文件,也沒有任何運行證據。作爲clickonce更新過程的一部分,清理似乎發生內聯。

+0

我們遇到相同與我們的企業應用程序有關我們的應用程序更新代碼與'ApplicationDeployment.CurrentDeployment.Update()'。更新沒有解決問題後沒有重新啓動,舊版本仍保留在磁盤上。你是否設法解決了這個問題? – Niki 2011-10-27 12:27:16

0

您是否立即檢查它?一天之後,他們甚至不會離開? ClickOnce清道夫服務應該會出現並刪除舊版本。如果您按最新版本推送最新版本,是否刪除其他版本? (爲此,請將「更新」對話框中所需的最低版本設置爲您正在部署的相同版本)。

+0

所需的最低版本不會執行任何操作。有沒有辦法立即運行這個「ClickOnce清道夫」服務?有關於這種清道夫服務的任何文件嗎?我還沒有聽說過 – Clyde 2010-05-20 18:13:45

+0

此外,我創建了一個新的Windows窗體應用程序,並通過點擊一次進行部署,它的行爲正確,只剩下兩個版本。所以有一些關於我的真實應用程序有所不同,但我無法在其發佈配置中找到任何區別。 – Clyde 2010-05-20 18:15:21

+0

是的,他們仍然在那裏一天後 – Clyde 2010-05-21 12:38:37

1

清道夫服務是ClickOnce引擎的一部分;它會自動運行,而不是您可以直接訪問的東西。它應該出現並清理舊版本。

關於最小版本的問題。如果您部署新版本&將最小需求版本設置爲新版本#,是否將應用程序更新爲該版本?然後將前者留在磁盤上?

是否有任何可以看到的圖案?它緩存的部署數量是否有限制?

還有一些關於陰影文件夾的事情讓我記憶猶新;這些文件並不存在。我會做一些研究,看看我的筆記,看看我能找到什麼。

它是一種什麼樣的應用程序?的WinForms/WPF/VSTO?

當你說它正在緩存文件夾,它是哪個文件夾?例如,對於winforms應用程序,爲每個版本創建兩個文件夾(xxxxtion ...和xxxxexe ...或類似的東西)以及一堆文件夾 - 一個用於部署中包含的每個程序集 - 這些文件夾緩存的程序集版本,以防止它們每次都沒有更改時下載它們。它是您看到的倍數的xxxxtion和xxxxexe文件夾嗎?

+0

這是一個winforms應用程序,確實有你描述的兩種類型的文件夾。只有兩個「exe」文件夾,它們包含應用程序圖標,配置文件以及我作爲應用程序內容包含的chm幫助文件。 這是「重刑」文件夾被無休止地重複。每一個包含exe文件,所有dll,加上「exe」文件夾中的文件,包括10兆chm文件。 – Clyde 2010-05-24 12:31:45

+0

我不知道它是否重要,但我沒有啓動時的應用程序自動檢查版本 - 在代碼中使用ApplicationDeployment.CurrentDeployment.CheckForDetailedUpdate處理,然後ApplicationDeployment.CurrentDeployment.Update() – Clyde 2010-05-24 12:44:53

+0

您是否嘗試過更改它自動更新並查看它是否清除了這些文件? – RobinDotNet 2010-05-28 18:27:29

-1

How to Delete

Clear Click-Once (versioning) Cache

從文檔:被在線託管

ClickOnce應用程序的空間,他們可以通過約束的ClickOnce緩存的大小配額佔有量受到限制。緩存大小適用於所有用戶的在線應用程序;一個部分信任的在線應用程序僅限於佔用配額空間的一半。安裝的應用程序不受高速緩存大小的限制,也不計算高速緩存限制。對於所有ClickOnce應用程序,緩存僅保留當前版本和以前安裝的版本。 默認情況下,客戶端計算機具有250 MB的聯機ClickOnce應用程序的存儲空間。數據文件不計入此限制。系統管理員可以通過更改註冊表項HKEY_CURRENT_USER \ Software \ Classes \ Software \ Microsoft \ Windows \ CurrentVersion \ Deployment \ OnlineAppQuotaInKB來放大或縮小特定客戶端計算機上的配額,這是一個表示緩存大小(以千字節爲單位)的DWORD值。例如,爲了將高速緩存大小減少到50 MB,您可以將此值更改爲51200

+1

我認爲您誤解了文檔 - 此緩存限制是機器上所有點擊應用程序的總限制。對於單個應用程序,「緩存僅保留當前版本和以前安裝的版本」http://msdn.microsoft.com/zh-cn/library/267k390a(v=VS.100).aspx – Clyde 2010-05-28 16:48:21

0

我知道這個問題有點舊,但最近我們遇到了這個問題,我也不確定原因。似乎只有一些用戶有時會發生。

我們嘗試實現部分刪除..\Apps\2.0目錄中的某些舊文件夾的代碼,但是當回滾到以前的版本時,如果以前的版本文件夾應該存在但已被我們的代碼刪除,ClickOnce不會檢查它是否被刪除並重新下載它,而不是假定它仍然存在,然後安裝變得損壞,並且IT需要爲每個用戶手動重新安裝,然後才能再次使用該應用程序!可怕的是,如果你有50多個用戶。

如果有人知道強制ClickOnce在更新之前/之後重新下載所有文件依賴關係的方法,我想知道!