ClickOnce 和独立存储

发布于 2024-07-08 08:29:46 字数 183 浏览 8 评论 0原文

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

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

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

The Winform application is release with ClickOnce in our Intranet. We store personal preference for the GUI in the Isolated Storage. All works pretty fine :)

The problem is when we have a new version of the application, we publish... all preferences are lost! User need to setup their preference over and over each version.

Is there a way to freeze the isolation for the whole application instead of the version?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(4

筱武穆 2024-07-15 08:29:46

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

You need to use application scoped, rather than domain scoped, isolated storage. This can be done by using one of IsolatedStorageFileStream's overloaded constructors.

Example:

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

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

However, now you will run into the issue of this code only working when the application has been launched via ClickOnce because that's the only time application scoped isolated storage is available. If you don't launch via ClickOnce (such as through Visual Studio), GetUserStoreForApplication() will throw an exception.

The way around this problem is to make sure AppDomain.CurrentDomain.ActivationContext is not null before trying to use application scoped isolated storage.

鸵鸟症 2024-07-15 08:29:46

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

I was working on a ClickOnce app a while ago and used Environment.GetFolderPath(ApplicationData) - e.g. roaming app data folder, to store all settings. Worked fine and survived numerous updates. Just create a subdireectory with the name of your app or CompanyName/AppName or whatever and store everything in there.

狼性发作 2024-07-15 08:29:46

其他答案的总结:

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

a summary from the other answers:

IsolatedStorageFile isolatedStorage = IsolatedStorageFile.GetUserStoreForAssembly();//for visual studio
if (System.Deployment.Application.ApplicationDeployment.IsNetwor‌​kDeployed)
{
    isolatedStorage = IsolatedStorageFile.GetUserStoreForApplication();//for click once applications
}
我也只是我 2024-07-15 08:29:46

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

You have to store a permanent version of user settings in a more durable store like database. Your application can decide to use the isolated storage if it is available. If it is not available (because of a newer version), the app should get the settings from database and use it to re-initialize the settings in isolated storage. If settings are changed, you should update both places. Unless there is a newer version of the app, your app should not have to get the settings from DB.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文