Вот что у меня получилось ...
Я использовал WiX и DTF для создания управляемого кода Custom Action для шифрования данного раздела файла конфигурации:
public static void EncryptConfig(Session session)
{
var configPath = session["APPCONFIGPATH"];
var sectionToEncrypt = session["SECTIONTOENCRYPT"];
var fileMap = new ExeConfigurationFileMap();
fileMap.ExeConfigFilename = configPath;
var configuration = ConfigurationManager.OpenMappedExeConfiguration(fileMap, ConfigurationUserLevel.None);
ConfigurationSection section = configuration.GetSection(sectionToEncrypt);
if (!section.SectionInformation.IsProtected)
{
section.SectionInformation.ProtectSection("DataProtectionConfigurationProvider");
section.SectionInformation.ForceSave = true;
configuration.Save(ConfigurationSaveMode.Modified);
}
}
Часть моего непонимания, которая вызвала этот вопрос, заключалась в том, что я не знал, что вы можете безопасно создавать настраиваемые действия в управляемом коде, используя DTF. Документация на DTF редкая, но как только она заработает, это здорово.
Я обнаружил, что это работает, только если я запланировал настраиваемое действие после InstallFinalize.
Вот конфигурация WiX, чтобы это произошло:
<InstallExecuteSequence>
<Custom Action="EncryptConfigurationFiles" After="InstallFinalize" />
</InstallExecuteSequence>
<Fragment>
<Binary Id="YourProject.CustomActions.dll" SourceFile="$(var.YourProject.CustomActions.TargetDir)$(var.YourProject.CustomActions.TargetName).CA.dll" />
<CustomAction Id="EncryptConfigurationFiles" BinaryKey="YourProject.CustomActions.dll" DllEntry="EncryptConfig" Return="check" />
</Fragment>
Эти блоги / сайты помогли мне попасть туда, и большая часть приведенного выше кода была получена из них:
http://geekswithblogs.net/afeng/Default.aspx
http://blog.torresdal.net/2008/10/24/WiXAndDTFUsingACustomActionToListAvailableWebSitesOnIIS.aspx
http://blogs.msdn.com/jasongin/archive/2008/07/09/votive-project-platform-configurations.aspx
@ PITADeveloper ... Спасибо за ответ. Я обнаружил, что мне не нужно загружать сборку для шифрования файла конфигурации.
Если вы используете это, вы должны использовать try catch и вернуть ActionResult ... Выше приведен псевдокод.
Наконец, я использую DataProtectionConfigurationProvider. Для провайдера RSA, я думаю, есть еще пара обручей, через которые можно прыгнуть.
Надеюсь, это кому-нибудь поможет!