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只是一个明显神秘的黑盒子吗?

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

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

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

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

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

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

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

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

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

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

我知道这个问题有点陈旧,但最近我们遇到了这个问题,我也不确定原因。 似乎有时只会发生,对某些用户而言。

我们尝试实现可以​​部分删除..\Apps\2.0目录中某些旧文件夹的代码,但是当回滚到以前的版本时,如果以前的版本文件夹应该在那里但被我们的代码删除,则Cl​​ickOnce不会检查它是否被删除并重新下载,而不是假设它仍然存在,然后安装变得损坏,IT需要为每个用户手动重新安装,然后才能再次使用该应用程序! 如果你有50多个用户可怕。

如果有人知道一种方法强制ClickOnce在更新之前/之后再次重新下载所有文件依赖项,我想知道!

如何删除

清除Click-Once(版本控制)缓存

来自文档:

在线托管的ClickOnce应用程序受限于ClickOnce缓存大小的配额占用的空间量受到限制。 缓存大小适用于所有用户的在线应用程序; 单个部分受信任的在线应用程序仅限于占用一半的配额空间。 已安装的应用程序不受高速缓存大小的限制,并且不计入高速缓存限制。 对于所有ClickOnce应用程序,缓存仅保留当前版本和先前安装的版本。 默认情况下,客户端计算机具有250 MB的在线ClickOnce应用程序存储空间。 数据文件不计入此限制。 系统管理员可以通过更改注册表项HKEY_CURRENT_USER \ Software \ Classes \ Software \ Microsoft \ Windows \ CurrentVersion \ Deployment \ OnlineAppQuotaInKB来扩大或减少特定客户端计算机上的此配额,这是一个DWORD值,表示以千字节为单位的缓存大小。 例如,为了将缓存大小减小到50 MB,您可以将此值更改为51200