我有一个加密配置文件中某个部分的应用程序。我第一次尝试从配置文件中读取加密部分时收到错误消息:“无法识别的属性'configProtectionProvider'。请注意,属性名称区分大小写。”
config = ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None);
// Get the section in the file.
ConfigurationSection section = config.GetSection("EncryptedSection");
if (section != null)
{
// Protect the section.
section.SectionInformation.ProtectSection("RsaProtectedConfigurationProvider");
section.SectionInformation.ForceSave = true;
// Save the change.
config.Save(ConfigurationSaveMode.Modified);
}
ConfigurationManager.RefreshSection("EncryptedSection");
Properties.Settings.Default.Reset();
//This is the part where I read the encrypted section:
ConfigurationManager.RefreshSection("EncryptedSection");
System.Collections.IDictionary HSMMasterKeyConfig = (System.Collections.IDictionary)System.Configuration.ConfigurationManager.GetSection("EncryptedSection");
这只在我第一次尝试读取加密部分时发生。我注意到.config文件在第一次保存后立即更新,但出于某种原因我需要重新启动应用程序才能使用加密部分。
答案 0 :(得分:2)
你读过这个......
http://bytes.com/groups/net/521818-configurationerrorexception-when-reading-protected-config-section
...因为它似乎是一个涉及MSFT支持工程师的对话,直接映射到您的情况。
答案 1 :(得分:2)
执行此操作的最佳方法是仅在安装期间加密app.config部分。将安装程序类添加到项目中并覆盖类中的Install方法。在此方法中,您应该执行加密。您必须在重写的Install方法的末尾调用base.Install。在“安装项目”中转到“自定义操作”,然后找到“安装自定义操作”以指向“项目”输出[exe或assembly],其中包含Installer类实现的定义。这样它会在安装过程中加密你的app.Config部分,你不会遇到这个问题。应用程序将自动使用DPAPI提供程序读取/写入部分或设置。
希望这有帮助。
感谢。
Ruchit S。
答案 2 :(得分:1)
答案 3 :(得分:1)
供您参考的问题是,尝试加密配置部分的进程没有管理员权限。我将此过程添加到管理员组并解决了它。
答案 4 :(得分:1)
我今天遇到了同样的问题。通常,每当我启动配置为加密的应用程序时,我总是在启动时检查配置以确定它是否受到保护。如果不是它我遵循标准的SectionInformation.ProtectSection方法。这总是我的第一步,但今天出于某种原因我决定在执行保护检查之前从配置中引用一些内容并获得“无法识别的属性'configProtectionProvider'。请注意,属性名称区分大小写。”错误。您需要做的就是在正常代码中引用配置之前运行保护代码,您将不再有错误。
答案 5 :(得分:0)
尝试在单独的Application Domain中运行Exe。将应用程序加载到新的AppDomain后,检查是否加密了部分。如果没有,则加密该部分并触发AppDomain卸载并重新加载可执行文件。