Variável PATH e aspas (janelas)

4

Estou tendo um problema estranho com a variável PATH no Windows:

Meu aplicativo está em uma pasta c: \ app \ bin e as DLLs deste aplicativo estão na pasta c: \ app \ runtime. Para executar meu programa, modifico a variável PATH com um arquivo * .bat normalmente com o seguinte script:

set PATH="c:\app\bin";"c:\app\runtime";%PATH%

Isso trará os executáveis e as DLLs no caminho. No entanto, em um dos meus sistemas Windows Server 2008 R2, isso não funciona. Isso significa que, se eu executar o comando acima em uma janela de comando, posso iniciar o arquivo exe de c: \ app \ bin, mas o aplicativo reclama imediatamente que não é possível localizar alguns arquivos dll necessários ("O programa não pode ser iniciado porque .... dll está faltando no seu computador ... "). Esses arquivos dll devem estar em c: \ app \ runtime.

Eu experimentei um pouco e ele aponta que há três soluções alternativas:

  1. Modifique permanentemente a variável PATH usando a caixa de diálogo Propriedades do sistema
  2. Omita as aspas no comando acima para o caminho dos arquivos DLL, por exemplo, defina PATH="c:\app\bin";c:\app\runtime;%PATH%
  3. Copiando os arquivos DLL para o diretório em que o exe está localizado

A parte estranha sobre a solução 2 é que ela não altera nada se eu incluir aspas no primeiro caminho ou se eu alterar a ordem dos caminhos.

Alguém tem uma idéia de por que meu script original não funciona? Preciso executá-lo, porque ele é criado automaticamente por um programa e não posso alterar o aplicativo que gera o arquivo bat.

    
por Heinrich 12.01.2012 / 09:47

1 resposta

6

A variável PATH normalmente não contém aspas; usa ponto e vírgula como seu delimitador. Por exemplo, aqui está a definição PATH do meu sistema, que inclui pastas com espaços:

%SystemRoot%\system32;%SystemRoot%;%SystemRoot%\System32\Wbem;%SYSTEMROOT%\System32\WindowsPowerShell\v1.0\;C:\Program Files\Microsoft Windows Performance Toolkit\

Parece que o Windows pode executar programas com caminhos "citados", mas a rotina de pesquisa de DLL não consegue lidar com eles.

Idealmente, você deve usar:

set PATH=c:\app\bin;c:\app\runtime;%PATH%

Outra solução alternativa pode ser lançar o programa a partir de c:\app\runtime , por exemplo:

cd /d C:\app\runtime
..\bin\app.exe

Isso pode até não exigir a modificação da variável PATH .

    
por 12.01.2012 / 11:43