2010-07-16 49 views
3

我目前在应用程序目录中存储了一个序列化的XML文件,该文件包含程序操作特定的所有更改(不是典型的系统或用户配置)。几周前,我们开始遇到无法正确保存的问题(请阅读my previous question)。长话短说,我们终于发现Windows 7(有时是Vista)在写入应用程序目录(特别是Program Files下的任何东西)时存在问题。现在,如果这是一个正常的配置文件,我只是将它存储在用户的APPDATA文件夹下,但这不正常。我们在我们自己的仪器上运行它,错误配置有99%的原因是客户在运行我们的软件时遇到问题。所以我们需要这个文件是可访问的,以便他们可以很容易地找到它并通过电子邮件发送给我们。 Appdata对于有经验的用户来说很难找到,更不用说非技术人员。我们也尝试以管理员身份运行它,并使文件夹权限开放(我们可以控制它运行的每台计算机;它永远不会运行在某个随机的人的计算机上)。但是,这些有时会起作用,有时不起作用。存储自定义配置文件的位置

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

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

+0

AppData是它的地方。另请参阅我的答案http://stackoverflow.com/questions/3219255/why-do-files-get-placed-c-users-usernameappdata-local-virtualstore-program-fil/3219276#3219276 – 2010-07-16 18:54:15

+1

我知道这是正确的地方,但是我应该如何让技术上不识字的用户在发生问题时向我们发送文件? – drharris 2010-07-16 18:57:08

+0

@ 0xA3理想情况下,我可以修复我们的软件以及我们软件中使用的9-12硬件供应商和驱动程序中的所有错误,但是我不会问这个问题。 ;)当用户发送配置文件时,我能够处理每个导致问题的情况,但是很多事情我们无法预见。例如,将一个设备的参数设置为256会导致溢出,即使驱动程序和pinvokes显示它应该高达65k。踢球者257表现良好。 – drharris 2010-07-16 19:01:16

回答

1

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

Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData) 

否则,你可能把它在我的文档:

Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments) 

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

+0

用户确实需要偶尔编辑它。我甚至没有想到把它写入我的文档中......通常这是一个荒谬的想法,但由于这些计算机是由我们控制的,这将是一个完全可以接受的解决方案。 – drharris 2010-07-16 19:08:00

1

对于那些用户,你可以建立一个按钮来打开这个目录。你可以把它放在一个不显眼的地方,你以后可以指示它们。

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