我们正在使用ClickOnce部署的应用程序遇到这个奇怪的问题:
在某些客户端计算机上,更新应用程序时ClickOnce不会复制.pre文件夹中的旧数据库。
ClickOnce更新应用程序,但它的行为类似于新安装。
另一个奇怪的事情是,尽管指定了最低要求版本以强制任何客户端更新具有此问题的客户端PC,但会显示ClickOnce升级提示(它还会显示“将应用程序还原到以前的状态”)控制面板“程序和功能”项目。)
实际上,其他客户端PC在没有提示的情况下自动升级,ClickOnce更新的行为应该如此。
这是一个成熟的应用程序,这是我们的第30个出版物。
另一个因素是: 通常我们使用两台PC but after installing Visual Studio 2012 we cannot use them to publish ClickOnce交替发布此应用程序,然后我们创建一个虚拟机,仅用于发布此应用程序。
-------------- ---------------- UPDATE
我接受了RobinDotNet的解决方案,因为没有依赖ClickOnce可靠地移动您的数据是正确的。
我还发现你不能依赖ApplicationDeployment.IsFirstRun。
我将代码更改为使用IsFirstRun的内部检查,现在每个更新都顺利运行。
答案 0 :(得分:2)
正如您所发现的,您无法依靠ClickOnce可靠地移动数据。我强烈建议您将数据放在LocalApplicationData中,即使它涉及移动数据库。 Here是一篇博客文章,解释了如何做到这一点。
我怀疑您的问题(以及无法使用两个不同的VS2012实例)是因为您用于签署应用程序的证书。它是从CA购买的证书,还是使用VS2012创建的测试证书?如果它是测试证书,那么您可能在每台计算机上创建了一个新证书,并且每次发布它时,ClickOnce都认为您正在更改证书,这是身份的一部分。当身份发生变化时,它不会向前传输数据,并认为它是一个新的应用程序。使用.NET 3.5,他们至少停止强制所有客户在更改证书时卸载并重新安装。
您的解决方案是创建一个证书并在一台计算机上使用它,然后将其复制到另一台计算机上。双击它将其添加到第二台机器上的证书存储区,并确保它是项目的一部分,以便您选择相同的项目。 (在“签名”选项卡中,请务必选择该文件,不要从计算机上的“证书存储”中选择该文件。)