10

Winform 应用程序在我们的 Intranet 中随 ClickOnce 一起发布。我们将个人对 GUI 的偏好存储在独立存储中。一切都很好:)

问题是当我们有一个新版本的应用程序时,我们发布......所有的偏好都丢失了!用户需要在每个版本上设置他们的偏好。

有没有办法冻结整个应用程序而不是版本的隔离?

4

4 回答 4

19

您需要使用应用程序范围,而不是范围的隔离存储。这可以通过使用IsolatedStorageFileStream 的重载构造函数之一来完成。

例子:

using System.IO;
using System.IO.IsolatedStorage;
...

IsolatedStorageFile appScope = IsolatedStorageFile.GetUserStoreForApplication();    
using(IsolatedStorageFileStream fs = new IsolatedStorageFileStream("data.dat", FileMode.OpenOrCreate, appScope))
{
...

但是,现在您将遇到此代码仅在通过 ClickOnce 启动应用程序时才有效的问题,因为那是应用程序范围的隔离存储唯一可用的时间。如果您不通过 ClickOnce 启动(例如通过 Visual Studio),GetUserStoreForApplication()将引发异常。

解决问题的方法是在尝试使用应用程序范围的隔离存储之前确保AppDomain.CurrentDomain.ActivationContext不为空。

于 2008-10-22T19:32:03.277 回答
4

不久前,我正在开发 ClickOnce 应用程序并使用 Environment.GetFolderPath(ApplicationData) - 例如漫游应用程序数据文件夹来存储所有设置。工作正常,并在众多更新中幸存下来。只需使用您的应用名称或 CompanyName/AppName 或其他名称创建一个子目录,然后将所有内容存储在其中。

于 2008-10-14T17:25:44.393 回答
2

其他答案的摘要:

IsolatedStorageFile isolatedStorage = IsolatedStorageFile.GetUserStoreForAssembly();//for visual studio
if (System.Deployment.Application.ApplicationDeployment.IsNetwor‌​kDeployed)
{
    isolatedStorage = IsolatedStorageFile.GetUserStoreForApplication();//for click once applications
}
于 2017-12-07T11:34:36.687 回答
1

您必须将用户设置的永久版本存储在更持久的存储中,例如数据库。如果可用,您的应用程序可以决定使用隔离存储。如果它不可用(因为新版本),应用程序应该从数据库中获取设置并使用它来重新初始化隔离存储中的设置。如果设置更改,您应该更新这两个地方。除非有更新版本的应用程序,否则您的应用程序不必从数据库获取设置。

于 2008-10-14T17:12:44.620 回答