É possível ter PATH
uma variável de ambiente inteira ou parte específica para o tipo de imagem do processo em execução (32 bits / 64 bits)? Quando executo algum aplicativo a partir de 64 bits cmd.exe, gostaria que ele escolhesse a versão de 64 bits da biblioteca OpenSSL, enquanto que quando executo algum aplicativo a partir de 32 bits cmd.exe, gostaria que ele escolhesse a versão de 32 bits da biblioteca OpenSSL.
14
echo %programfiles%
mostra um caminho diferente, dependendo do tipo de cmd.exe do qual é executado, maswhere ssleay32.dll
nos dois tipos de cmd.exe (32 bits e 64 bits) não é possível encontrar essa dll e exibeINFO: Could not find files for the given pattern(s).
Alguma idéia?A resposta (marcada como correta) fornecida pelo romka é simples e elegante, mas infelizmente não funciona (pelo menos no Windows 7 e Windows 8 de 64 bits, não forcei mais o teste).
O problema vem do fato de que a variável% PATH% do sistema nem sempre expande outra variável env: ela trabalha com% SYSTEMDRIVE% por exemplo, mas infelizmente não para% PROGRAMFILES%. A Wikipedia sugere que esse comportamento é proveniente 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 de sistema de arquivos mágica do e os diretórios System32 / SysWoW64, conforme 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 softlink em um diretório personalizado (funciona no Windows Vista e em versões posteriores do Windows):
A propósito, desculpe-me por não comentar diretamente nas postagens relevantes: atualmente não há reputação suficiente na minha conta para fazer isso.
fonte
Sim, é absolutamente possível. Basta escrever três arquivos .bat. O primeiro deve ficar assim:
O segundo e o terceiro arquivo .bat são basicamente os mesmos, exceto que diferem em seus nomes. O primeiro será chamado x86.bat, o segundo ia64.bat, e eles serão colocados em uma pasta chamada bin, que está acima do primeiro arquivo bat. Você terá isso:
O conteúdo do segundo e terceiro arquivo .bat deve ficar assim:
Você pode criar um link para o primeiro arquivo .bat, que terá as seguintes configurações:
Alvo:% comspec% / k "PATH \ first.bat" OPÇÃO | Onde OPTION é x86 ou ia64
Início em: CAMINHO | 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ê pode 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 espero que a Microsoft não me processe por usar seu script.
EDITAR:
Ah, eu acho que te entendi um pouco. 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:
fonte
%ProgramFiles%
variáveis. (Citação: O próprio% ProgramFiles% depende se o processo que solicita a variável de ambiente é ele próprio 32 bits ou 64 bits (isso é causado pelo redirecionamento de 64 bits do Windows no Windows). En.wikipedia.org/wiki/ … )Eu queria apenas resumir a resposta que obtive seguindo os links fornecidos na resposta de Baptiste Chardon. Usando a
mklink
ferramenta de linha de comando para criar um link simbólico diretórioC:\Windows\system32
e emC:\Windows\SysWOW64
, cada um com o mesmo nome (embora alvos diferentes), você pode, em seguida, basta adicionar esse emC:\Windows\system32
que oPath
variável de ambiente. Por exemplo:fonte
Eu tive esse problema e a resposta é a seguinte:
O caminho para a 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 queC:\programs
.Em nossas máquinas de 32 bits, os programas da empresa com variável de ambiente são
c:\program files
e, nas máquinas de 64 bits, éc:\progra~2
. Em seguida, definimos nossos atalhos para os usuários%companyprograms%\...
Você pode fazer isso por meio da diretiva de grupo ou por script.
fonte
Como o romka indicado no acompanhamento, a resposta simples é o diretório SysWOW64.
Felizmente, os instaladores da Shining Light Productions cuidam disso para você. Basta executar os instaladores de 32 bits e 64 bits e optar por copiar os .DLLs no diretório "Sistema" do Windows e o diretório apropriado será escolhido para os .DLLs (ou seja, os .DLLs de 64 bits entrarão no System32 e os .DLLs de 32 bits no SysWOW64.
Depois de fazer isso, meus aplicativos de 32 bits encontram os .DLLs de 32 bits e os meus aplicativos de 64 bits encontram os .DLLs de 64 bits.
fonte