无法将文件写入Windows 7中的Application.StartupPath

mak*_*kki 1 c# installation uac exception winforms

我创建了一个winform应用程序,然后创建了该应用程序的设置.此应用程序在Application.StartupPath中记录文件中的一些信息.不幸的是,当我尝试写入"访问被拒绝"文件时,我遇到了异常.请指导我如何摆脱它..

谢谢

Fré*_*idi 10

除了系统管理员之外,您永远不应该假设应用程序启动路径是可写的,尤其是在现代Windows系统上.

我建议您使用返回的文件夹,而不是将文件存储在那里Environment.GetFolderPath(SpecialFolder.ApplicationData).保证该文件夹可由当前用户写入.

您可以在此处找到有关此问题的Microsoft准则.

  • @makki,我认为你不能那样做.您的卸载程序必须枚举系统上的所有用户帐户,并在每个配置文件中查找该文件.此外,如果启用了[漫游用户配置文件](http://en.wikipedia.org/wiki/Roaming_user_profile),您的文件将最终存储在中央位置,并按需部署到未知数量的工作站.处理这种情况的一种方法是在卸载期间不删除文件.另一个优点是,如果稍后重新安装该应用程序,用户将恢复其设置. (3认同)

Jon*_*eet 6

这是典型的 - 您应该写入应用程序的"程序"区域.您应该写入文件系统的数据区域 - 可能是用户的设置区域或常见的应用程序设置区域.

基本上这个政策是强化的(我相信在Vista中)试图阻止程序完成你目前正在做的事情.最好的方法不是绕过它 - 它是改变应用程序存储其设置的位置.

  • @GregC,安装程序通常可以写入启动文件夹(毕竟,它只是将应用程序*部署在那里*),因此它可以使用该文件夹来存储配置文件.当然,这些文件应该只包含共享和只读数据. (3认同)