2

Мне нужно иметь возможность нормально запускать этот пакет на компьютерах x86 и x64, чтобы проверить, правильно ли установлена программа.

У нас есть приложение, которое устанавливается в x86 в каталоге стандартных программных файлов, а при установке в x64 оно устанавливается в каталоге программных файлов x86.

В настоящее время он сообщает false , отображает эхо-сообщение о том, что приложение установлено, и эхо-сообщение о том, что приложение не установлено при запуске на x86 и 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*** )

3 ответа3

1

При запуске на x86 ваш скрипт будет выполнять оба блока кода: для x86 и x64. Вы должны вставить goto :eof непосредственно перед меткой :x64dc или добавить другую метку (скажем, :end) в конец скрипта и вставить goto end непосредственно перед меткой :x64dc

Другая проблема заключается в значении переменной %processor_architecture% . Моя машина (Windows 7 x64) возвращает AMD64 , а не X64 . Так что в моем случае ни одна из инструкций if приводит к переходу, поэтому снова выполняются оба блока кода

См. Этот вопрос для получения списка всех возможных значений %processor_architecture% .

1

Разве что-то подобное не будет понятнее? Также устраняет проблему предположений о переменной процессора_архитектуры, указанной @MBu выше.

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.
)

Еще одна альтернатива, которая мне только что пришла в голову, - это чтобы ваша программа установки или командный файл записали ключ в реестр с указанием места установки (это можно сделать с помощью reg.exe, стандартной утилиты Windows). Я был бы рад конкретизировать это решение немного больше, если вам интересно.

0

Используйте конструкции if , else if и 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***
    )
)

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .