Executando processo com as environment variables do Visual Studio

Publicado: 17/02/2007 em IntoSpaces

Eae galera blz?
Hoje me deparei com um problema interessante de ser resolvido.
Eu precisava gerar uma dll utilizando o Microsoft Incremental Linker, porém esta dll seria concebida a partir de outros aplicativos de linha de comando, o mc.exe e o rc.exe…

Se eu utilizasse o prompt de comando do visual studio, tudo ocorreria perfeitamente, mas executando os processor através da classe System.Diagnostics.Process não era possível, pois as variáveis de ambiente do visual studio não são criadas temporariamente para este ambiente.
A solução então foi forçar as variáveis de ambiente do visual studio para que eu pudesse executar vários comandos sob um ambiente preparado como o prompt de comando do visual studio.

O segredo está em um arquivo de batch que vem junto com o VS:
C:Program FilesMicrosoft Visual Studio 8Common7Toolsvsvars32.bat

Quando você executa o prompt do vs você não está executando um prompt feito propriamente para ele, mas na verdade você está executando este bat que prepara temporariamente aquela instância do prompt de comandos do windows com as variáveis de ambiente do visual studio.

De posse destas informações decidi executar meus comandos em um batch customizado, adicionando em tempo de execução o conteúdo do batch do visual studio e logo após os meus comandos…

string programFilesPath = System.Environment.GetFolderPath(System.Environment.SpecialFolder.ProgramFiles);
string envVar = programFilesPath + \Microsoft Visual Studio 8\Common7\Tools\vsvars32.bat;
string batchPath = path + "\" + filename + ".bat";

using (StreamWriter batchWriter = new StreamWriter(batchPath))
{
  
using(StreamReader reader = new StreamReader(envVar))
   {
      batchWriter.Write(reader.ReadToEnd());
      reader.Close();
   }

   //Meus comandos sob o ambiente preparado
   batchWriter.WriteLine(
"mc -u -U " + filename + ".mc");
   batchWriter.WriteLine(
"rc -r " + filename + ".rc");
   batchWriter.WriteLine(
"link -dll -noentry -out:" + filename + ".dll " + filename + ".res");
   batchWriter.Close();
}

 Depois disso apenas eu executo o arquivo .bat e o trabalho está pronto!
Agora sempre que precisarem trabalhar com ferramentas do visual studio através de linha de comando podem usar este procedimento que facilita as coisas

Divirtam-se

[]’s
Shinji

Deixe uma resposta

Preencha os seus dados abaixo ou clique em um ícone para log in:

Logotipo do WordPress.com

Você está comentando utilizando sua conta WordPress.com. Sair / Alterar )

Imagem do Twitter

Você está comentando utilizando sua conta Twitter. Sair / Alterar )

Foto do Facebook

Você está comentando utilizando sua conta Facebook. Sair / Alterar )

Foto do Google+

Você está comentando utilizando sua conta Google+. Sair / Alterar )

Conectando a %s