Como meu aplicativo C # pode verificar se um determinado aplicativo / processo (observação: não o processo atual) está sendo executado no modo de 32 ou 64 bits?
Por exemplo, posso querer consultar um processo específico por nome, ou seja, 'abc.exe', ou com base no número de identificação do processo.
c#
process
32bit-64bit
satya
fonte
fonte
Respostas:
Uma das maneiras mais interessantes que vi é esta:
Para descobrir se OUTROS processos estão sendo executados no emulador de 64 bits (WOW64), use este código:
fonte
(Environment.OSVersion.Version.Major >= 5 && Environment.OSVersion.Version.Minor >= 1)
E é por isso que a Microsoft precisa criar shims de compatibilidade de mentira de versão - para contornar bugs em códigos como esse. O que acontecerá quando o Windows Vista (6.0) for lançado? E as pessoas criticam a Microsoft por fazer o Windows 7 versão 6.1 em vez da 7.0, que corrige muitos bugs de compatibilidade de aplicativos.processHandle = Process.GetProcessById(process.Id).Handle;
vez de apenasprocessHandle = process.Handle;
?Se você estiver usando .Net 4.0, é uma linha única para o processo atual:
Consulte Environment.Is64BitProcessProperty (MSDN).
fonte
Is64BitProcess
? Talvez eu possa usar o que faz para descobrir se estou executando como um processo de 64 bits.Is64BitProcess
( referencesource.microsoft.com/#mscorlib/system/environment.cs ). No entanto, é apenas uma instrução de retorno embutida no código, controlada pelo símbolo de compilação.A resposta selecionada está incorreta porque não cumpre o que foi pedido. Ele verifica se um processo é um processo x86 em execução no sistema operacional x64; portanto, ele retornará "false" para um processo x64 no sistema operacional x64 ou processo x86 em execução no sistema operacional x86.
Além disso, ele não trata os erros corretamente.
Aqui está um método mais correto:
fonte
Environment.GetEnvironmentVariable("PROCESSOR_ARCHITECTURE") == "x86"
sempre retornará verdadeiro para um processo de 32 bits. Melhor usarSystem.Environment.Is64BitOperatingSystem
se o .NET4 for compatívelVocê pode verificar o tamanho de um ponteiro para determinar se ele é de 32 bits ou 64 bits.
fonte
fonte
Aqui está a verificação de uma linha.
fonte
Eu gosto de usar isto:
Desta forma, se eu precisar localizar ou verificar um arquivo, posso escrever facilmente:
fonte
Environment.GetFolderPath(Environment.SpecialFolder.ProgramFilesX86)
vez de embutir em código `C: \ Arquivos de programas`?