Windows在公共文件文件夹上形成app.config

时间:2012-05-08 18:58:03

标签: c# .net winforms app-config

我有一个应用程序,可以在app.config文件中存储单个用户名和密码。 我目前在运行时可以写入app.config,以便用户可以更改它。

问题在使用安装项目安装时开始,app.config安装在程序文件上,这对任何用户都不可写。

因此,我在安装后将app.config位置更改为公共文件文件夹,以便所有用户都可以读取和写入。

现在,在安装时,似乎存储在那里的数据根本无法访问,使用ConfigurationManager.AppSettings [“networkPath”]例如返回空字符串。

我做错了什么?

1 个答案:

答案 0 :(得分:0)

您可以通过两种方式实现:

  1. 安装程序为程序文件中的应用程序配置文件授予特殊权限。我们使用innosetup来做。如果你没有能力,那就从程序启动中做到:

    static void Main()
    {
        GrantAccess()
    }
    
    private static bool GrantAccess()
    {
        FileInfo fInfo = new FileInfo(Assembly.GetEntryAssembly().Location + ".config");
        FileSecurity dSecurity = fInfo .GetAccessControl();
        fSecurity.AddAccessRule(new FileSystemAccessRule("everyone", 
                                                         FileSystemRights.FullControl, 
                                                         AccessControlType.Allow));
        fInfo .SetAccessControl(fSecurity);
        return true;
    }
    
  2. 否则,您可以选择其他位置放置您的appconfig文件,然后按以下方式阅读:

    ExeConfigurationFileMap fileMap = new ExeConfigurationFileMap();
    fileMap.ExeConfigFilename = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.CommonApplicationData), Assembly.GetEntryAssembly().GetName().Name) + ".exe.config";
    Configuration config = ConfigurationManager.OpenMappedExeConfiguration(fileMap, 
                                                                           ConfigurationUserLevel.None);
    return config.AppSettings.Settings["Key"].Value);
    
  3. 在我看来,这是一个糟糕的选择。