C# “下的文件写入权限问题”;“程序文件”;文件夹

C# “下的文件写入权限问题”;“程序文件”;文件夹,c#,.net,permissions,C#,.net,Permissions,我正在使用inno setup为我的应用程序制作一个安装包,我的应用程序是由C#+.Net 2.0+VSTS 2008编写的。Inno setup=>我在Program Files/Foo文件夹下安装我的应用程序(Foo是我的应用程序名)。我的应用程序的目标是Windows Vista 我发现的问题是我的程序无法写入program Files/Foo文件夹。我需要写入此文件夹的权限才能保存一些配置文件。奇怪的是,我注意到文件夹Program Files/Foo被标记为只读,并且我已经检查了Pro

我正在使用inno setup为我的应用程序制作一个安装包,我的应用程序是由C#+.Net 2.0+VSTS 2008编写的。Inno setup=>我在Program Files/Foo文件夹下安装我的应用程序(Foo是我的应用程序名)。我的应用程序的目标是Windows Vista

我发现的问题是我的程序无法写入program Files/Foo文件夹。我需要写入此文件夹的权限才能保存一些配置文件。奇怪的是,我注意到文件夹Program Files/Foo被标记为只读,并且我已经检查了Program Files下的所有文件夹是否被标记为只读,例如Office

我的问题是,

  • 为什么程序文件下的所有文件夹都标记为只读?这意味着我们不应该写入程序文件下的单个应用程序文件夹?如果不是,我们应该在哪里向磁盘写入信息,就像用户上次选择的单个应用程序的配置信息一样
  • 如果我们可以写入程序文件下的单个应用程序文件夹,那么解决方案是什么?我不希望我的应用程序以管理员身份运行以解决此问题,如果有解决方案可写入此文件夹,我希望尽可能要求最低权限

  • 一种常见的解决方案是将配置文件安装到应用程序数据文件夹中,即如下所示:

    Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData)
    

    应使用和将用户特定的配置数据写入当前用户的应用程序数据文件夹。

    最佳做法是不将配置数据存储在程序文件文件夹中。而是将应用程序的数据存储在%AppData%\YourApplicationName中。根据您是要按用户存储配置数据,还是要将配置数据存储在共享的公用文件夹中,请使用以下枚举之一获取文件夹路径:

    string userAppData = Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData);  
    string commonAppData = Envrionment.GetFolderPath(Environment.SpecialFolder.CommonApplicationData); 
    
    默认情况下,Vista用户不会以管理员身份运行程序,因此这些程序只能对“程序文件”下的文件夹进行读取。用户可以通过禁用UAC来更改此行为,您可以要求用户这样做,但在office设置中,用户可能没有此选项。这就是为什么要改用AppData——应用程序总是可以将数据读写到AppData文件夹

    有关UAC的信息可以在微软的网站上找到。虽然本页相当长,但它是了解UAC的起点:

    不建议写入程序文件下的单个应用程序文件夹?是否有任何已发布的指南?不建议编写程序文件下的单个应用程序文件夹?任何已发布的指导原则?Windows XP-应用程序指导原则这是一个漫游。:-)如果是Windows Vista,是否有任何已发布的最佳实践或指导原则要求我们将数据存储到AppData中?