我有一个应用程序,可以在app.config文件中存储单个用户名和密码。 我目前在运行时可以写入app.config,以便用户可以更改它。
问题在使用安装项目安装时开始,app.config安装在程序文件上,这对任何用户都不可写。
因此,我在安装后将app.config位置更改为公共文件文件夹,以便所有用户都可以读取和写入。
现在,在安装时,似乎存储在那里的数据根本无法访问,使用ConfigurationManager.AppSettings [“networkPath”]例如返回空字符串。
我做错了什么?
答案 0 :(得分:0)
您可以通过两种方式实现:
安装程序为程序文件中的应用程序配置文件授予特殊权限。我们使用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;
}
否则,您可以选择其他位置放置您的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);
在我看来,这是一个糟糕的选择。