0

我们在 ClickOnce 部署的一个应用程序中遇到了这个奇怪的问题:

在某些客户端计算机上,更新应用程序时 ClickOnce 不会复制 .pre 文件夹中的旧数据库。

ClickOnce 会更新应用程序,但它的行为就像是新安装一样。

另一个奇怪的事情是,尽管指定了最低要求的版本,以强制任何客户端更新有此问题的客户端 PC,但仍显示 ClickOnce 升级提示(它还在控制面板中显示“将应用程序恢复到以前的状态”程序和功能”项目)。

实际上,其他客户端 PC 会自动升级而无需提示,并且 ClickOnce 更新的行为也应如此。

这是一个成熟的应用程序,这是我们的第 30 个出版物。

另一个要素是:通常我们使用两台 PC 交替发布此应用程序,但在安装 Visual Studio 2012 后,我们无法使用它们发布 ClickOnce,然后我们创建一个仅用于发布此应用程序的虚拟机。

- - - - - - - 更新 - - - - - - - -

我接受了RobinDotNet的解决方案,因为不依赖 ClickOnce 可靠地移动数据是完全正确的。

我还发现您不能依赖ApplicationDeployment.IsFirstRun

我更改了我的代码以使用我对 IsFirstRun 的内部检查,现在每个更新都运行顺利。

4

1 回答 1

2

正如您所发现的,您不能依赖 ClickOnce 可靠地移动数据。我强烈建议您将数据放在 LocalApplicationData 中,即使它涉及移动数据库。是一篇博客文章,详细解释了如何做到这一点。

我怀疑您的问题(以及无法使用两个不同的 VS2012 实例)是因为您用于签署应用程序的证书。是从 CA 购买的证书,还是用 VS2012 创建的测试证书?如果是测试证书,那么您可能在每台机器上都创建了一个新证书,并且每次发布它时,ClickOnce 都认为您正在更改证书,这是身份的一部分。当身份发生变化时,它不携带数据,并认为它是一个新的应用程序。使用 .NET 3.5,当您更改证书时,他们至少不再强制所有客户卸载并重新安装。

您的解决方案是创建一个证书并在一台机器上使用它,然后将其复制到另一台机器上。双击它以将其添加到第二台机器上的证书存储中,并确保它是项目的一部分,以便您选择同一个。(在签名选项卡中,一定要选择文件,不要从机器上的证书存储中选择它)。

于 2013-09-20T01:48:55.940 回答