我在哪里可以安全地存储ClickOnce部署的数据文件?

Bre*_*yan 16 .net c# clickonce

我一直用它ApplicationDeployment.CurrentDeployment.DataDirectory来存储客户端在运行时下载的内容,每次应用程序启动时都会出现这些内容,但是现在我发现如果应用程序更新,这些更改似乎是随机的.

在单击一次部署中为应用程序存储用户数据的最可靠方法是什么?

目前我一直在使用以下方法

private const string LocalPath = "data";

public string GetStoragePath() {
    string dir;
    if (ApplicationDeployment.IsNetworkDeployed) {
        ApplicationDeployment ad = ApplicationDeployment.CurrentDeployment;
        dir = Path.Combine(ad.DataDirectory, LocalPath);
    } else {
        dir = LocalPath;
    }
    return CreateDirectory(dir);
}
Run Code Online (Sandbox Code Playgroud)

我最初遵循文章在ClickOnce应用程序中访问ClickOnce Data Directory本文是推荐路径的标题下的文章.

注意:CreateDirectory(string)如果目录尚不存在,只需创建一个目录.

我发现问题的根本原因是我创建了许多文件和索引文件,这个索引文件包含绝对路径,click-once会在升级时移动内容(或副本),因此绝对路径不再存在.我将调查隔离存储,因为Damokles建议查看这是否对单击一次部署具有相同的副作用.

Tri*_*dus 21

另一种选择是在用户的AppData文件夹中为您的应用程序创建一个目录并将其存储在那里.您可以通过以下方式获得相应的路径:

Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData)
Run Code Online (Sandbox Code Playgroud)

你会发现很多应用程序使用它(它是本地的等价物).它也不会在ClickOnce版本之间移动.


Leo*_*ngs 5

查看IsolatedStorage这应该有所帮助.它甚至可以在部分信任环境中使用.

为了保证数据的存在,您需要使用应用程序范围的IsolatedStorage

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

IsolatedStorageFile appScope = IsolatedStorageFile.GetUserStoreForApplication();    
using(IsolatedStorageFileStream fs = new IsolatedStorageFileStream("data.dat", FileMode.OpenOrCreate, appScope))
{
...
Run Code Online (Sandbox Code Playgroud)

这篇文章中获取的代码