存储自定义配置文件的位置

时间:2010-07-16 18:50:59

标签: c# windows-7 file-io

我目前在应用程序目录中存储了一个序列化的XML文件,其中包含特定于程序操作的所有更改(不是典型的系统或用户配置)。几周前,我们开始遇到无法正确保存的问题(请阅读my previous question)。

长话短说,我们终于发现Windows 7(有时是Vista)在写入应用程序目录时遇到了问题(特别是Program Files下的任何内容)。现在,如果这是一个普通的配置文件,我只需将它存储在用户的APPDATA文件夹下,但这不正常。我们在自己的仪器上运行它,并且错误配置是客户在运行我们的软件时遇到问题的99%。因此,我们需要访问此文件,以便他们可以轻松找到并通过电子邮件发送给我们。 Appdata对于有经验的用户来说很难找到,更不用说非技术人员了。

我们也尝试以管理员身份运行它,并使文件夹权限全开(我们可以控制它运行的每台计算机;它永远不会在某个随机人员的计算机上运行)。但是,这些有时是有效的,有时则不然。

最糟糕的是,当我把文件写回来时,它甚至不会抛出错误;它只是将它写入某个临时目录,该目录在某个未知的时间点到期。几周后,我们的用户将遇到问题,配置文件全部搞砸了。

所以,我的问题是我应该在哪里存储这个文件,如果不是在Program Files中?我是否应该把它放在APPDATA中,并制作一个小工具,以便在出现问题时自动通过电子邮件发送给我们?或者我可以将其保留在Program Files中,但是可以更改某些特定权限或注册表项以使其正常运行吗?

2 个答案:

答案 0 :(得分:1)

这取决于用户是否需要直接编辑文件。如果没有,您应该将它们放在%APPDATA%中,您可以通过以下方式访问它:

Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData)

否则,您可以将它放在我的文档中:

Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments)

无论哪种方式,将它放在Program Files中都不是一个好主意。正如您所发现的那样,即使以管理员身份运行,也存在权限问题。

答案 1 :(得分:1)

对于这些用户,您可以构建一个按钮来打开此目录。你可以将它放在一个不起眼的地方,以后你可以将它们引导到。

对于在其包装盒上有电子邮件客户端的用户,您可以使用一个按钮来创建包含主题的新电子邮件,并自动将该文件附加到电子邮件中。