Variável de ambiente PATH diferente para Windows de 32 e 64 bits - é possível?

14

É possível ter toda ou parte da variável de ambiente PATH específica para o tipo de imagem do processo em execução (32 bits / 64 bits)? Quando eu executo algum aplicativo de 64 bits cmd.exe, eu gostaria que ele escolhesse a versão de 64 bits da biblioteca OpenSSL, ao passo que, quando eu executo algum aplicativo de 32 bits cmd.exe, eu gostaria de escolher a versão de 32 bits da biblioteca OpenSSL.

FOLLOW UP
where.exe não encontra libs do OpenSSL quando a variável% ProgramFiles% é usada em a variável de ambiente PATH

    
por Piotr Dobrogost 18.02.2011 / 21:06

6 respostas

9

Faça com que a variável %ProgramFiles% to %ProgramFiles(x86)% env mude para trabalhar para você:

Posicione pastas com as versões x32 e x64 da biblioteca OpenSSL nos diretórios %programfiles% e %ProgramFiles(x86)% apropriados e, na variável de ambiente PATH , use uma referência a essas pastas por meio da variável %programfiles% .

Dessa forma, quando você estiver executando em um ambiente de x32 bits, seu PATH entry %programfiles%/OpenSSL/ será automaticamente resolvido para %ProgramFiles(x86)%/OpenSSL/ em um disco.

    
por 19.02.2011 / 00:05
7

A resposta (marcada como direita) fornecida pelo romka é simples e elegante, mas infelizmente não funciona (pelo menos no Windows 7 e no Windows 8 64 bits, eu não forcei meu teste ainda mais).

O problema vem do fato de que a variável% PATH% do sistema nem sempre expande outra variável env: funciona com% SYSTEMDRIVE%, por exemplo, mas infelizmente não para% PROGRAMFILES%. Wikipedia sugere que esse comportamento vem do nível de indireção (% SYSTEMDRIVE% não se refere a uma terceira variável env) .

A única solução que encontrei é usar o Redirecionador do sistema de arquivos magic e os diretórios System32 / SysWoW64, como sugerido nos comentários.

Para evitar a implantação direta de DLLs no diretório do Windows, que geralmente é difícil de manter, é possível implantar um link para um diretório personalizado (funciona no Windows Vista e versões posteriores do Windows):

  • método encontrado aqui: link
  • como fazer um link aqui: link

A propósito, desculpe por não comentar diretamente nas postagens relevantes: atualmente não há reputação suficiente na minha conta para fazer isso.

    
por 25.09.2013 / 15:35
5

Sim, é absolutamente possível. Simplesmente escreva três arquivos .bat. O primeiro deve ser assim:

@echo off
if "%1" == "" goto x86
if not "%2" == "" goto usage

if /i %1 == x86 goto x86
if /i %1 == ia64 goto ia64
goto usage

:x86
if not exist "%~dp0bin\x86.bat" goto missing
call "%~dp0bin\x86.bat"
goto :eof

:ia64
if not exist "%~dp0bin\ia64.bat" goto missing
call "%~dp0bin\ia64.bat"
goto :eof

:usage
echo Error in script usage. The correct usage is:
echo %0 [option]
echo where [option] is: x86 ^| ia64
echo:
echo For example:
echo %0 x86
goto :eof

:missing
echo The specified configuration type is missing. The tools for the
echo configuration might not be installed.
goto :eof

O segundo e o terceiro arquivo .bat são basicamente os mesmos, exceto pelo fato de diferirem no nome. O primeiro será chamado de x86.bat segundo ia64.bat e eles são colocados em uma pasta chamada bin que está acima do primeiro arquivo bat. Você terá isso:

PATH\first.bat
PATH\bin\x86.bat
PATH\bin\ia64.bat

O conteúdo do segundo e terceiro arquivo .bat deve estar assim:

@set PATH=THE PATH YOU WANT

Você pode criar um link para o primeiro arquivo .bat, que terá as seguintes configurações:

Destino:% comspec% / k "PATH \ first.bat" OPÇÃO | Onde OPTION é x86 ou ia64

Iniciar em: PATH | Onde PATH é o caminho para o seu first.bat

O script é o script simplificado que a Microsoft usa para iniciar a linha de comando correta para o ambiente do Visual Studio. Você poderia simplesmente expandir esses scripts para N ambientes. Adicionando mais arquivos .bat para diferentes ambientes e editando o first.bat com mais opções e instruções goto. Espero que seja auto explicativo.

E eu espero que a Microsoft não me processe por usar o script deles.

EDITAR:

Ah, eu acho que te entendi mal. Para a linha cmd de 32 bits, o link deve ser criado como:

Destino:% windir% \ SysWoW64 \ cmd.exe "PATH \ first.bat" x86

EDIT2:

Tente algo como:

if "%ProgramFiles%" == "%ProgramFiles(x86)%" goto x64_PATH
if "%ProgramFiles%" == "%ProgramW6432%" goto x86_PATH

:x64_PATH
@set PATH=YOUR 64 bit PATH
SOME_PATH\your64BitApp.exe
goto :eof

:x86_PATH
@set PATH=YOUR 32bit PATH
SOME_PATH\your32BitApp.exe
goto :eof
    
por 18.02.2011 / 21:45
1

Eu queria apenas resumir a resposta que obtive seguindo os links fornecidos na resposta de Baptiste Chardon. Usando a ferramenta de linha de comando mklink para criar um link simbólico de diretório em C:\Windows\system32 e em C:\Windows\SysWOW64 , cada um com o mesmo nome (embora destinos diferentes), você pode adicionar o nome em C:\Windows\system32 para a variável de ambiente Path . Por exemplo:

C:\> mklink /D C:\Windows\SysWOW64\my_XXbit_dlls C:\dlls\x86
symbolic link created for C:\Windows\SysWOW64\my_XXbit_dlls <<===>> C:\dlls\x86
C:\> mklink /D C:\Windows\System32\my_XXbit_dlls C:\dlls\x64
symbolic link created for C:\Windows\System32\my_XXbit_dlls <<===>> C:\dlls\x64
    
por 02.10.2015 / 13:57
0

Eu tive esse problema e a resposta é a seguinte:

O caminho para sua variável de sistema nas máquinas de 64 bits é c:\progra~2 . Você precisa ter um caminho sem espaço para sua variável ambiental, caso contrário, o sistema não lerá mais do que C:\programs .

Em nossas máquinas de 32 bits, os programas de empresa de variável de ambiente são c:\program files e, nos de 64 bits, c:\progra~2 . Em seguida, definimos nossos atalhos para os usuários como %companyprograms%\...

Você pode fazer isso por meio da política de grupo ou por script.

    
por 16.06.2011 / 14:03
-1

Como indicado no seguimento, romka, a resposta simples é o diretório SysWOW64.

Felizmente, os instaladores das produções Shining Light cuidam disso para você. Basta executar os instaladores de 32 bits e 64 bits e optar por copiar os .DLLs no diretório "System" do Windows e o diretório adequado é escolhido para os .DLLs (isto é, os .DLLs de 64 bits entram no System32 e os .DLLs de 32 bits entram no SysWOW64. / p>

Depois que eu fiz isso, meus aplicativos de 32 bits encontraram os 32bit. Os DLLs e meus aplicativos de 64 bits encontraram os .DLLs de 64 bits.

    
por 31.08.2012 / 19:01