【问题标题】:Where can I store my config file using windows forms?我可以在哪里使用 Windows 窗体存储我的配置文件?
【发布时间】: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


【解决方案1】:

您是否想过使用 C:\ 大多数计算机都已解锁。或者使用Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData); AppData 文件夹存储在用户名空间中,不需要权限。 (只要记住为您的程序创建一个文件夹以避免冲突)

【讨论】:

  • 我使用 Visual Studio 安装程序 - 安装向导,因此它会自动在应用程序的程序文件中创建一个文件夹。我的重点是避免使用 AppData 文件夹,因为我最终会想要存储一些导出的数据,并且我不想向用户解释如何访问应用程序数据。我将编辑我的问题,因为似乎很多用户都很困惑。
  • 啊,我明白了。我的文档中的文件夹怎么样。 Visual Studio、Word 和 Rpg maker 等许多程序都使用这种方法来存储临时文件和配置文件 @AthanasiosKaragiannis
【解决方案2】:

出于安全考虑,写入权限受限是一个已知问题。 更多可以了解here

由于没有人能够回答这个问题,我将发布我的解决方案。而不是使用 Visual Studio 安装程序工具打包解决方案。我通过从构建中复制生成的可执行文件来安装应用程序。如果使用安装程序工具生成的 .msi 安装该应用程序,则此版本的应用程序具有写入权限。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2023-03-25
    • 2011-06-27
    • 2018-09-23
    • 1970-01-01
    • 2010-10-15
    • 2022-01-10
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多