Winform应用程序是在我们的Intranet中使用ClickOnce发布的。我们在隔离存储中存储GUI的个人偏好。一切都很好:)

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

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

有帮助吗?

解决方案

您需要使用应用程序作用域,而不是作用域的隔离存储。这可以通过使用 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 不为空。

其他提示

我刚刚在ClickOnce应用程序上工作并使用了Environment.GetFolderPath(ApplicationData) - 例如漫游app数据文件夹,用于存储所有设置。工作得很好,幸存了许多更新。只需使用您的应用程序或CompanyName / AppName或其他名称创建一个子目录,并将所有内容存储在那里。

其他答案摘要:

IsolatedStorageFile isolatedStorage = IsolatedStorageFile.GetUserStoreForAssembly();//for visual studio
if (System.Deployment.Application.ApplicationDeployment.IsNetwor‌​kDeployed)
{
    isolatedStorage = IsolatedStorageFile.GetUserStoreForApplication();//for click once applications
}

您必须在数据库等更耐用的商店中存储永久版本的用户设置。您的应用程序可以决定使用隔离存储(如果可用)。如果它不可用(由于版本较新),应用程序应从数据库获取设置并使用它重新初始化隔离存储中的设置。如果更改了设置,则应更新这两个位置。除非有更新版本的应用程序,否则您的应用程序不必从数据库中获取设置。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top