【问题标题】:XML saved by application installed in Program Files: where is it?安装在 Program Files 中的应用程序保存的 XML:它在哪里?
【发布时间】:2013-03-14 12:20:06
【问题描述】:

我在过去的两个小时里用谷歌搜索了这个,但没有任何结果,所以……

我正在开发一个使用 XML 文件来保存数据的应用程序。这些文件应该与程序可执行文件存在于同一目录中。我用:

string filePath = System.IO.Path.GetDirectoryName(Application.ExecutablePath) + "\\xml\\filename.xml";

有效。

我已经在 Inno Setup 中创建了安装文件。这也很有效,将我的 XML 文件准确地复制到我想要它们去的地方。

我直接从安装文件夹、开始菜单图标、桌面快捷方式打开我的应用程序,它工作正常。

我对我的程序进行了一些更改,然后我将其关闭并重新启动。一切都很好:所有保存的更改都从 XML 中读回。

然后我打开指定的 XML 文件并没有任何变化!

我不会打扰,至少它可以工作,但是:

  1. 当我卸载应用程序然后再次将其安装到同一目录时,对先前安装的文件所做的更改仍然存在!
  2. 非常很想知道发生了什么。

仅当程序安装到 Program Files 时才会发生这种情况。如果我将它安装到我的文档,更改会显示在 XML 文件中,并且在重新安装后,默认设置会按预期恢复。

我的问题是:

  1. 这些 XML 文件存储在哪里,如果指定的路径指向 Program Files 而它们不存在,我该如何加载它?
  2. 显然,我该如何解决?

编辑 终于在 C:\Users[USERNAME]\AppData\Local\VirtualStore\Program Files[APPNAME] 中找到了那些文件

【问题讨论】:

  • 您使用的是哪个 Windows 版本/遇到问题?
  • 在 windows vista 和更新版本中,他们确实强化了程序文件目录。我建议不要在那里写。
  • 那么最佳实践是什么?将程序文件保存在哪里,以便它适用于 Windows Vista 和更新版本并通过代码轻松访问它们?
  • 尝试存储在本地应用程序数据中。
  • 同样当数据保存在本地应用程序数据文件夹中时,卸载/安装应用程序和未清理用户数据的问题可能会继续存在,安装程序通常默认情况下不会在卸载过程中删除用户数据。

标签: c# xml program-files


【解决方案1】:

检查保存在本地应用程序数据文件夹中的内容(Windows 7 为 \Users[USERNAME]\AppData\Local\)。

您的应用似乎无权将内容保存在您的 ProgramFiles 文件夹中,并将其保存在可以保存的位置,可能在此位置:

String appData = 
    Environment.GetFolderPath(Environment.SpecialFolder.LocalApplicationData);

您也可以尝试以管理员身份运行您的应用程序并检查您的 xml 数据的更改是否仍然没有显示。

【讨论】:

  • 是的,确实如此。当我以管理员身份运行它时,它工作正常。它没有保存到任何(普通或用户)AppData 文件夹中,我仍在搜索...
  • 它可能会将名称更改为一些随机文本,也许是按预期内容搜索?
【解决方案2】:

你不能打印出

的值吗
    System.IO.Path.GetDirectoryName(Application.ExecutablePath)

那么您应该能够看到您的 xml 文件的存储位置,如果它是控制台应用程序,只需使用控制台打印,如果它是 WPF,则将其打印到标签或其他东西上

【讨论】:

  • 我试过了,但它会打印出正确的值,“C://Program Files/MyProgramFolder/xml/filename.xml”
猜你喜欢
  • 2010-11-05
  • 1970-01-01
  • 2012-09-10
  • 1970-01-01
  • 2017-04-08
  • 1970-01-01
  • 2011-05-20
  • 1970-01-01
  • 2017-02-01
相关资源
最近更新 更多