VARIAVES DE AMBIENTE - ESTRANHO
Fala pessoal blz ?
Olha que estranho, meu sistema checa algumas variaveis de ambiente do Windows (ProgramFiles), se a máquina for X86 tranquilo, porém me deparei com a seguinte situação, quando uma máquina é X64 existem 2 variaveis de ambiente para o ProgramFiles são elas:
ProgramFiles=C:\Program Files
ProgramFiles(x86)=C:\Program Files (x86)
Eu preciso capturar o primeiro mas pegando o valor da variavel ele sempre traz a 2 (x86) eu sei que está correto mas preciso pegar o valor do primeiro só que eu não quero setar isso manualmente, alguém tem uma forma de pegar o valor das 2 ?
Se quiserem testar o que estou falando, podem dar o comando SET no DOS e verifiquem o que estou falando:
Para pegar o valor dentro do VB estou fazendo assim:
System.Environment.GetFolderPath(Environment.SpecialFolder.ProgramFiles
Ou
Environment.GetEnvironmentVariable([Ô]ProgramFiles[Ô])
Existe uma variavel chamada [Ô]ProgramW6432[Ô] no DOS como eu pego esse valor no VB ? Sem se assim (Environment.GetEnvironmentVariable([Ô]ProgramW6432[Ô])
Olha que estranho, meu sistema checa algumas variaveis de ambiente do Windows (ProgramFiles), se a máquina for X86 tranquilo, porém me deparei com a seguinte situação, quando uma máquina é X64 existem 2 variaveis de ambiente para o ProgramFiles são elas:
ProgramFiles=C:\Program Files
ProgramFiles(x86)=C:\Program Files (x86)
Eu preciso capturar o primeiro mas pegando o valor da variavel ele sempre traz a 2 (x86) eu sei que está correto mas preciso pegar o valor do primeiro só que eu não quero setar isso manualmente, alguém tem uma forma de pegar o valor das 2 ?
Se quiserem testar o que estou falando, podem dar o comando SET no DOS e verifiquem o que estou falando:
Para pegar o valor dentro do VB estou fazendo assim:
System.Environment.GetFolderPath(Environment.SpecialFolder.ProgramFiles
Ou
Environment.GetEnvironmentVariable([Ô]ProgramFiles[Ô])
Existe uma variavel chamada [Ô]ProgramW6432[Ô] no DOS como eu pego esse valor no VB ? Sem se assim (Environment.GetEnvironmentVariable([Ô]ProgramW6432[Ô])
Esqueça o DOS, não existe mais DOS, o que você se referiu como uma variável do DOS é uma variável de ambiente também, e você pode pega-la da mesma forma que pega a outra
Environment.GetEnvironmentVariable([Ô]ProgramW6432[Ô])
Environment.GetEnvironmentVariable([Ô]ProgramW6432[Ô])
Acho que você não entendeu minha pergunta.
Hum, acho que não prestei atenção no final, mas qual o motivo de você não querer pegar pela variável de ambiente? No caso deste:
System.Environment.GetFolderPath(Environment.SpecialFolder.ProgramFiles)
Ele sempre vai retornar o valor de acordo com o como seu programa foi compilado, se ele for 32 Bits o Windows sempre vai retornar a pasta com X86, agora se ele for de 64 Bits ele vai retornar a pasta sem o X86, dependendo do caso você poderia deixar o seu programa como AnyCPU, mas isso depende um pouco do que você usa já que algumas coisas podem não funcionar em 64 Bits, de cabeça me vem o caso de usar bancos de dados do Access.
System.Environment.GetFolderPath(Environment.SpecialFolder.ProgramFiles)
Ele sempre vai retornar o valor de acordo com o como seu programa foi compilado, se ele for 32 Bits o Windows sempre vai retornar a pasta com X86, agora se ele for de 64 Bits ele vai retornar a pasta sem o X86, dependendo do caso você poderia deixar o seu programa como AnyCPU, mas isso depende um pouco do que você usa já que algumas coisas podem não funcionar em 64 Bits, de cabeça me vem o caso de usar bancos de dados do Access.
Na realidade encontrei a solução mais simples...rsrsrs
O meu sistema executa uma busca no disco procurando por arquivos suspeitos (música,videos etc), porém não procuro no diretório [Ô]Arquivos de Programas[Ô], então coloco como excessão o a variavel de ambiente (System.Environment.GetFolderPath(Environment.SpecialFolder.ProgramFiles)) no X86 ele retorna corretamente, o problema é que no X64 existe 2 diretórios de programas o [Ô]Arquivos de Programas[Ô] e [Ô]Arquivos de Programas (X86)[Ô] pegando pelo valor da variavel do ambiente ele sempre retorna o 2 caso (X86) entendeu dai o problema, então infelizmente criei mais 1 variavel e setei o valor como [Ô]Arquivos de Programas[Ô],
Resolução final:
2 Variaveis 1 com um valor da variavel do ambiente de forma automática e outra de forma manual.
A minha dúvida é somente que em micros X64 mesmo você pegando a variavel de ambiente que deveria vir como [Ô]Program Files[Ô] ele traz ela como [Ô]Program Files (X86)[Ô], bom enfim BUG do Windows...rsr
O meu sistema executa uma busca no disco procurando por arquivos suspeitos (música,videos etc), porém não procuro no diretório [Ô]Arquivos de Programas[Ô], então coloco como excessão o a variavel de ambiente (System.Environment.GetFolderPath(Environment.SpecialFolder.ProgramFiles)) no X86 ele retorna corretamente, o problema é que no X64 existe 2 diretórios de programas o [Ô]Arquivos de Programas[Ô] e [Ô]Arquivos de Programas (X86)[Ô] pegando pelo valor da variavel do ambiente ele sempre retorna o 2 caso (X86) entendeu dai o problema, então infelizmente criei mais 1 variavel e setei o valor como [Ô]Arquivos de Programas[Ô],
Resolução final:
2 Variaveis 1 com um valor da variavel do ambiente de forma automática e outra de forma manual.
A minha dúvida é somente que em micros X64 mesmo você pegando a variavel de ambiente que deveria vir como [Ô]Program Files[Ô] ele traz ela como [Ô]Program Files (X86)[Ô], bom enfim BUG do Windows...rsr
Acho que agora entendi, mas isso não é bug do windows não, e é por isso que existe essa variavel ProgramW6432
Imagine que você fez um programa de 32 Bits que acessa um arquivo na pasta Arquivos de Programas usando a variável de ambiente [Ô]ProgramFiles[Ô] para isso, um dia você resolve colocar ele no Windows de 64 Bits, o seu programa nunca foi preparado para isso, se ele for tentar acessar o arquivo na mesma pasta ele poderia acabar pegando a pasta errada (a de 64 Bits) se o Windows não mudasse o caminho para apontar pra pasta x86.
Pode testar ai, compile o programa para 64 Bits e ele retorna a pasta c:\Program Files, compilando para 32 Bits ele retorna a pasta C:\Program Files (x86), ai entra o caso do ProgramW6432, que é para programas de 32 Bits que sabem que estão rodando no Windows de 64 Bits poderem pegar o caminho do Program Files de 64 Bits.
Eu diria que não tem problema nenhum você usar o ProgramW6432, já que ele vai retornar um valor nulo (Nothing) caso o Windows seja de 32 bits então seria só você tratar isso, ou você poderia até usar o Environment.Is64BitOperatingSystem para tratar de acordo com o sistema operacional.
Imagine que você fez um programa de 32 Bits que acessa um arquivo na pasta Arquivos de Programas usando a variável de ambiente [Ô]ProgramFiles[Ô] para isso, um dia você resolve colocar ele no Windows de 64 Bits, o seu programa nunca foi preparado para isso, se ele for tentar acessar o arquivo na mesma pasta ele poderia acabar pegando a pasta errada (a de 64 Bits) se o Windows não mudasse o caminho para apontar pra pasta x86.
Pode testar ai, compile o programa para 64 Bits e ele retorna a pasta c:\Program Files, compilando para 32 Bits ele retorna a pasta C:\Program Files (x86), ai entra o caso do ProgramW6432, que é para programas de 32 Bits que sabem que estão rodando no Windows de 64 Bits poderem pegar o caminho do Program Files de 64 Bits.
Eu diria que não tem problema nenhum você usar o ProgramW6432, já que ele vai retornar um valor nulo (Nothing) caso o Windows seja de 32 bits então seria só você tratar isso, ou você poderia até usar o Environment.Is64BitOperatingSystem para tratar de acordo com o sistema operacional.
Tópico encerrado , respostas não são mais permitidas