ClickOnce部署将留下多个版本(是的,超过两个)

时间:2010-05-20 12:12:46

标签: c# visual-studio deployment clickonce

我有一个ClickOnce应用程序将所有旧版本留在我的磁盘上。这是一个经常更新的内部企业应用程序,因此这对于快速扩大我们的备份大小来说是一场灾难。

根据文档和其他Stack Overflow问题,它应该只将当前版本和先前版本保留在磁盘上。但是,每次部署项目并升级客户端时,我都会获得所有EXE,DLL和数据文件的另一个副本。我没有对应用程序进行任何更改,只是在Visual Studio中再次推送部署。

如何解决此问题?

问题似乎发生在Windows 7和Windows XP以及64位和32位Windows上。

我已经完成了安装版本的文件夹的差异,以下文件不同:

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

实际的可执行文件不同,MyApp.manifestMyDll1.manifest等也不同。

替代方案怎么样?在运行时查找包含我的应用程序的其他文件夹并删除它们是否安全?这会破坏什么吗?

ClickOnce只是一个明显神秘的黑盒子吗?

4 个答案:

答案 0 :(得分:6)

我想我终于想出了这个。对于某些未知(并且不可接受,坦率地说)的原因,如果新版本正在运行,旧版本的清理将不会发生 - 它只是无声地失败。

清理尝试在旧版本退出时运行,但由于我重新启动了应用程序,新版本已经启动,阻止清理。

另外,请注意其他答案中提到的“清道夫服务”似乎是完全捏造。我没有找到任何此类服务的文档,也没有任何证据表明它正在运行。清理似乎是作为clickonce更新过程的一部分内联发生的。

答案 1 :(得分:1)

清道夫服务是ClickOnce引擎的一部分;它会自动运行,而不是您可以直接访问的内容。它应该出现并清理旧版本。

关于min版本的问题。如果您部署新版本&将min required version设置为新版本#,是否将应用程序更新为该版本?然后把前一个放在磁盘上?

你能看到任何模式吗?它正在缓存的部署数量是否有限制?

还有一些关于影子文件夹的东西在我的记忆中徘徊;文件不是真的存在。我会做一些研究,看看我的笔记,看看我能找到什么。

它是什么类型的应用程序?的WinForms / WPF / VSTO?

当你说它是缓存文件夹时,它是哪个文件夹?例如,对于winforms应用程序,为每个版本创建了两个文件夹(xxxxtion ...和xxxxexe ......或类似的东西)加上一堆文件夹 - 一个用于部署中包含的每个程序集 - 这些是缓存版本的程序集,以便每次都没有更改时不必下载它们。你看到的是xxxxtion和xxxxexe文件夹的倍数吗?

答案 2 :(得分:0)

您是否立即检查?一天左右后它们甚至都没有消失? ClickOnce清道夫服务应该出现并删除旧版本。如果您将最新版本作为必需更新推送,是否会删除其他版本? (为此,请在“更新”对话框中将所需的最低版本设置为您正在部署的相同版本。)

答案 3 :(得分:-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