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

标签 c# .net 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);
}

我本来关注文章Accessing Local and Remote Data in ClickOnce ApplicationsClickOnce 数据目录 标题下,其中说明这是推荐的路径。

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

我发现我的问题的根本原因是我正在创建许多文件和一个索引文件,这个索引文件包含绝对路径,单击一次会在升级时移动内容(或副本),所以绝对路径没有不再存在。我将按照 Damokles 的建议研究隔离存储,看看这是否对单击一次部署有相同的副作用。

最佳答案

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

Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData)

您会发现很多应用程序都使用它(并且它是本地等效项)。它也不会在 ClickOnce 版本之间移动。

关于c# - 在哪里可以安全地存储 ClickOnce 部署的数据文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6760565/

相关文章:

c# - 包含多个项目的解决方案的 ClickOnce 部署

deployment - 保护单击一次Web部署的安装

c# - 如何检查绝对控件可见性以及如何通知绝对可见性的变化

c# - Controller 以字典为参数的 action stripping to dot

c# - RegEx替换C#中字符串中的特定字母

c# - 为什么结构实例不存在于堆或堆栈中

c# - 安装应用程序后单击此处

c# - 如果密码错误,重新显示表单

c# - 查询返回匿名类型列表,需要值列表

c# - 判断当前时间是否在多个时间跨度之间