Diretório de Verificação de Arquivo de Lote existe em x64 e / ou x86

2

Eu preciso ser capaz de executar esse lote bem em máquinas x86 e x64 para verificar se um programa foi instalado corretamente.

Temos um aplicativo que é instalado no x86 no diretório de arquivos de programas padrão e, quando instalado em x64, é instalado no diretório de arquivos de programa x86.

Atualmente, ele relata false , exibe o eco em que o aplicativo está instalado e o eco em que o aplicativo não está instalado quando executado em x86 e x64.

if /i "%processor_architecture%"=="x86" GOTO X86DC
if /i "%processor_architecture%"=="X64" GOTO X64DC

:X86DC
if exist "C:\Program Files\installeddir\app.exe" ( echo ***App is Installed Successfully*** )
if not exist "C:\Program Files\installeddir\app.exe" ( echo ***App is not installed *** )

:X64DC
if exist "C:\Program Files(x86)\installeddir\app.exe" ( echo ***App is Installed Successfully*** )    
if not exist "C:\Program Files(x86)\installeddir\app.exe" ( echo ***App is not installed*** )
    
por Phil Tingle 03.09.2013 / 20:13

3 respostas

1

Não seria algo assim tão claro? Também elimina a questão de fazer suposições sobre a variável processor_architecture apontada por @MBu acima.

if defined ProgramFiles(x86) (
    set appDir=%ProgramFiles(x86)%\installeddir
) else (
    set appDir=%ProgramFiles%\installeddir
)

if exist %appDir%\app.exe (
    echo We're installed in %appDir%. Woo hoo!
) else (
    echo Nope. Not installed.
)

Outra alternativa que acaba de ocorrer para mim seria que seu programa de instalação ou arquivo em lote escrevesse uma chave no registro com o local de instalação (pode ser feito com reg.exe, um utilitário padrão do Windows). Eu ficaria feliz em preencher essa solução um pouco mais se você estiver interessado.

    
por 03.09.2013 / 21:44
1

Quando executado no x86, seu script executará os dois blocos de código: para x86 e x64. Você precisa inserir goto :eof antes de :x64dc label ou adicionar outro label (digamos :end ) no final do script e inserir goto end antes de :x64dc label

Outro problema é o valor da variável %processor_architecture% . Minha máquina (Windows 7 x64) retorna AMD64 , não X64 . Portanto, no meu caso, nem as instruções if resultam em um salto, então novamente os dois blocos de código são executados.

Veja esta questão para obter uma lista de todos os possíveis valores %processor_architecture%

    
por 03.09.2013 / 20:30
0

Use as construções if , else if e else :

if /i "%processor_architecture%"=="x86" (
    if exist "C:\Program Files\installeddir\app.exe" (
        echo ***App is Installed Successfully***
    ) else (
        echo ***App is not installed ***
    )
) else if /i "%processor_architecture%"=="X64" (
    if exist "C:\Program Files(x86)\installeddir\app.exe" (
        echo ***App is Installed Successfully***
    ) else (
        echo ***App is not installed***
    )
)
    
por 04.09.2013 / 09:16