【发布时间】:2018-01-25 23:39:56
【问题描述】:
我对 Windows 窗体还很陌生,最近我的任务是创建一个简单的软件,该软件将通过 USB 驱动器部署到其他公司。我制作了这个软件,所以在第一次运行时我检查了一个 config.xml 文件。如果它不存在,我会将用户发送到一个表单以配置他们的首次设置。下次我运行程序时,它会跳过这一步,因为找到了 config.xml 文件及其值。问题是当我调试它时,我在可执行文件旁边找到了 config.xml 文件,但是当我在另一台计算机上运行它时,它将它存储到 appdata 虚拟存储中。我对此进行了阅读,发现它与写权限有关。
有什么方法可以在不提示用户执行任何额外操作(例如以管理员身份运行)的情况下解决此问题?我还计划保存使用此程序生成的结果报告,并希望我可以拥有可以在应用程序文件夹中轻松找到的 XML 文件。
*注意,我知道内置设置系统,但这也存储到 appdata 中,如果可执行文件直接移动到另一个,它会忽略该配置并想创建另一个。
编辑:请注意我试图避免写入 AppData 文件夹。该软件与 Visual Studio 安装程序 - 安装项目一起打包。将创建一个 msi 文件,该文件将应用程序存储在 C:\Program Files (x86)\\。在这个目录中,我有可执行文件、生成的 exe.config 文件以及所需的任何 DLL。这是我试图同时存储 config.xml 文件的文件夹,但由于某些 Windows 魔法,代码认为它会将其存储在此处,但实际上它存储在位于 AppData 中的 virtualStore 文件夹中。
【问题讨论】:
-
听起来你想写入 AppData。
-
@SLaks 不,请重新阅读问题。
-
AppData 是每个用户的,不需要管理员,也不涉及虚拟商店。
-
但是当你第一次创建配置文件时如何指定它的路径呢?似乎您的代码创建了它并选择了位置,因此不清楚为什么它无法检索该位置。
-
@Steve 我只是通过提供文件名使用 StreamWriter 创建文件,所以这应该在根目录中创建它。确实如此,但它会创建根目录的虚拟存储副本,而不是将其存储在可执行文件所在的真实目录中。该程序可以写入和读取文件没有问题。它只是目录并不是我告诉它的真正位置。
标签: c# xml windows winforms directory