Pergunta

Neste caso, a aplicação que define a variável de ambiente é executado em / para o aplicativo que precisa acessar o env.var. A Main () Valor Retornado (C # guia de programação) artigo MSDN discute seu uso dentro de um arquivo em lotes. Se eu tentar o mesmo, está tudo bem; mas o que é necessário é para ser executado não a partir de um script em lotes, mas dentro de uma aplicação.

Process.Start("app","args"); // app sets the env.var.
string envVar = System.Environment.GetEnvironmentVariable("ERRORLEVEL");

era, obviamente sem sucesso. Process.Start fez o trabalho "app" em um ambiente completamente diferente eu acredito. Em outras palavras, eu preciso executar "app" no mesmo ambiente que a aplicação de chamadas a fim de alcançar a variável de ambiente ele define.

Foi útil?

Solução

Se você está apenas tentando definir o ambiente da criança do pai:

var p = new Process();
p.StartInfo.EnvironmentVariables["TEST_ENV"] = "From parent";
p.StartInfo.UseShellExecute = false;
p.StartInfo.FileName = @"C:\src\bin\Debug\ChildProc.exe";
p.Start();

Se você não quer a criança para herdar o ambiente do processo pai:

var psi = new ProcessStartInfo();
psi.EnvironmentVariables["TEST_ENV"] = "From parent";
psi.UseShellExecute = false;
psi.FileName = @"C:\src\bin\Debug\ChildProc.exe";
Process.Start(psi);

Outras dicas

As variáveis ??de ambiente são herdadas de processos filhos, mas cada criança recebe uma cópia -. Se você mudar o ambiente do pai depois, isso não vai refletir na criança

Este é por razões de segurança:. Se as variáveis ??foram compartilhados, processos podia ver na memória de cada um que faria com que todos os tipos de problemas

Assim, a solução é definir a variável antes de iniciar o novo processo.

Se você precisa se comunicar com um processo filho existente, use um tubo.

Cada aplicativo é executado com a sua própria cópia do ambiente para um processo filho não pode influenciar o ambiente do pai. Isto é verdade, todo o caminho para CreateProcess onde o ambiente é um parâmetro de entrada / opcional -. Ou seja, one-way

Existem muitos mecanismos IPC que você tem disponível a partir de pipes nomeados para soquetes para memória compartilhada para arquivos ... a lista continua.

Mas o suspeito que os arquivos vão ser o mais fácil para você.

Você poderia ter o processo filho criar um arquivo que contém os pares nome / valor que você deseja que o aplicativo de chamada poderia, então, carregar e usar. O formato pode ser algo básico como:

key = value key2 = value2

um pouco mais complexa (mas talvez mais fácil trabalhar com) como XML ... ou qualquer formato personalizado que deseja.

O comando deve ser executado em dentro do ambiente do processo atual. Normalmente, o bash irá executar todos os processos como um processo filho que é dado um read-only copiar do ambiente do pai e cria uma nova entrada sempre que uma variável é modificado.

ponto (.) É um comando que não deve ser confundido com a especificação do diretório atual. O comando de ponto, o seguinte comando a ser executado dentro do ambiente do pai. Desta forma, as variáveis ??de ambiente do processo são as variáveis ??de ambiente do processo de chamada.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top