1

ClickOnce 回滚

一旦单个用户回滚一个版本,应用程序如何在本地检查这个并提供安装最新版本的选项?

由于技术的持续集成方面,我们的 Clickonce 应用程序众多。我们有一个新版本,用户所要做的就是接受安装。只需将特定于版本的 .application 文件从“Application Files”子目录移动到主根路径,甚至可以全局回滚新版本。如果特定用户需要回滚,他可以简单地从注册表运行卸载字符串或使用控制面板恢复到以前的版本。

我无法解决的一个问题是让该用户重新进入“升级检查”循环。我一直在使用Sysinternals工具Process Monitor来跟踪 ClickOnce 的注册表和文件系统逻辑。查看工具数据,它告诉我本地 ClickOnce 文件的位置和 SideBySide 设置的注册表项。但是,我无法弄清楚要更改哪些设置以覆盖已进行单独回滚的本地用户。我确定他们必须更改注册表中的 SideBySide PackageMetadata 才能完成此任务。

具体来说,我希望用户可以为运行的任何版本的 ClickOnce 应用程序提供两种选择。一个选择强制回滚,另一个选择允许用户回到当前更新的轨道。我只能在代码中完成第一个。

\\Server\Share\{clickonce}.application
\\Server\Share\Application_Files\{clickonce}_{version x}\{Clickonce}.application
\\Server\Share\Application_Files\{clickonce}_{version y}\{Clickonce}.application

Process:
dfsvc.exe

Local Storage:
C:\Users\{user}\AppData\Local\Apps\2.0\{unique}\{unique}
C:\Users\plugged\AppData\Local\Temp\Deployment\{unique}\{unique}.application

Registry:
HKCU\Software\Classes\Software\Microsoft\Windows\CurrentVersion\Deployment\SideBySide\2.0\PackageMetadata
HKCU\Software\Microsoft\Windows\CurrentVersion\Uninstall\{guid}
4

1 回答 1

0

我相信我找到了解决方案。要让 ClickOnce 应用程序重新进入升级循环,只需从本地版本链接到当前服务器版本。ClickOnce 应用程序使用桌面图标启动。即使用户回滚本地版本,桌面图标也不会改变,它仍然指向服务器位置。然而,它只会运行本地回滚版本,不会检查更新。解决方案是使用启动链接到服务器当前 .application 文件的进程的方法。这可以通过创建一个新的流程变量,然后使用 ClickOnce 应用程序的 WorkingDirectory 和 Filename 设置“StartInfo”来完成。

\Server\Share{ClickOnce}.application

dgp

于 2013-06-03T16:28:03.930 回答