quinta-feira, 5 de setembro de 2013

Criptografar o App.Config VS2010 e WiX 3.5 (Simples)

O primeiro passo é criar um projeto console aplicação dentro de sua solução de projeto. Inside the project insert the following into the Main method of the Program.cs. Dentro do projeto de inserir o seguinte no método Main da Program.cs


    class Program
    {
        // Lembre-se de Referenciar System.Configuration;

        static void Main(string[] args)
        {
            string configPath = String.Empty;
            const string sectionToEncrypt = "connectionStrings";
            foreach (String arg in args)
            {
                configPath = configPath + " " + arg;
            }

            configPath += "CONFIGNAME.exe.config";
            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);
            }
        }
    }
Esse simples código utiliza os argumentos passados a ele a partir WiX para construir o caminho da pasta de instalação e localizar o chamado arquivo de configuração (o laço é necessário devido aos espaços em nomes de diretório). Em seguida, utiliza a biblioteca System.Configuration para criptografar a seção connectionStrings (se desejar, esse método mesmo poderia ser usada para criptografar uma outra seção). Você precisa inserir o nome do seu arquivo de configuração referências e adicionar System.Configuration para este trabalho, post originado daqui.

O Batch a seguir foi elaborado para excluir o encrypt.exe depois da execução e excluir os arquivos do diretório de instalação.
cd %*
del Encrypt.exe
del RemoveAdditionalFiles.bat
Com o código escrito precisamos agora de ligar este até WiX. Comece adicionando uma referência de projeto ao projeto WiX para o projeto de criptografia. Em seguida, terá de adicionar os dois arquivos de saída do projeto de criptografia para a pasta de instalação. Uma lição simples sobre como incluir arquivos em sua instalação WiX é coberto aqui. Abaixo está o código para ligar as ações personalizadas para ocorrer após a conclusão da instalação.
<CustomAction Id="LaunchFile" FileKey="EncryptExe" ExeCommand="[INSTALLLOCATION]" />
<CustomAction Id="RemoveExtraFiles" FileKey="RemoveFiles" ExeCommand="[INSTALLLOCATION]" Return="asyncNoWait" />
<InstallExecuteSequence>
  <Custom Action="LaunchFile" After="InstallFinalize">NOT Installed</Custom>
  <Custom Action="RemoveExtraFiles" After="LaunchFile">NOT Installed</Custom>
</InstallExecuteSequence>
Este código deve ser colocado na parte inferior do arquivo WiX. The FileKey Should be set to the ID of the related deployed file and the ExeCommand should contain the property name of your install directory in square brackets (in my case INSTALLLOCATION). O FileKey Deve ser definido para o ID do arquivo relacionado mobilizados e os ExeCommand deve conter o nome da propriedade do seu diretório de instalação em colchetes (no meu caso installLocation).
Bons estudos

0 comentários:

Postar um comentário