Вот что я закончил с ...
Я использовал WiX и DTF, чтобы был создан управляемый код пользовательского действия зашифровать данный раздел файла конфигурации:
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, я думаю, есть еще несколько обручей, чтобы проскочить.
Надеюсь, это поможет кому-то!
Ницца! Это, безусловно, поможет мне в будущем. – 2008-11-25 16:19:20