[Цитировать]

    Adler
  • 1708
  • Стаж: 8 лет 6 месяцев
  • Сообщений: 1196
  • Репутация:65

    [+] [-]
  • Откуда: Луганск
kpo3uyc, необходимость запуска от админа задается пустым ключем реестра HasLUAShield по соседству с command.
Как открывать файлы из контекстного меню с полными правами

[Цитировать]

    Alex34234235
  • 28113
  • Стаж: 2 года 10 месяцев
  • Сообщений: 8
  • Репутация:0

    [+] [-]
Доброго времени суток, уважаемые форумчане!
Подскажите пожалуйста, решил в рамках автоматической установки приложений сделать bat-файл для установки приложений в зависимости от разрядности системы:
@Echo Off
If !%PROCESSOR_ARCHITECTURE%==!x86 Goto Start_x86
If !%PROCESSOR_ARCHITECTURE%==!AMD64 Goto Start_x64
Goto End
:Start_x86
Start "Firefox" Firefox Setup 89.0.msi -ms
Goto End
:Start_x64
Start "Firefox" Firefox Setup 89.0x64.msi -ms
Goto End
:End
Решил пойти дальше и попробовать также добавить зависимость от версии системы (Xp, 7, 8, 10). Например автоустановка Sumatra PDF, есть версии под обе разрядности, а также старая версия для XP. Вопрос, как сделать условия в рамках одного батника (если это не представляется возможным, то может можно реализовать вызовым др. батника):
если система Windows XP, то:
1. определить разрядность
2. если битность x86 запустить файлx32.exe
3. если битность x64 запустить файлx64.exe
если система Windows 7, то:
определить разрядность
1. определить разрядность
2. если битность x86 запустить файлx32.exe
3. если битность x64 запустить файлx64.exe
если система Windows 8.1, то:
определить разрядность
1. определить разрядность
2. если битность x86 запустить файлx32.exe
3. если битность x64 запустить файлx64.exe
если система Windows 10, то^
определить разрядность
1. определить разрядность
2. если битность x86 запустить файлx32.exe
3. если битность x64 запустить файлx64.exe
Спасибо!

[Цитировать]

    Gvint64
  • 24573
  • Стаж: 3 года 11 месяцев
  • Сообщений: 568
  • Репутация:63

    [+] [-]
Alex34234235, Определить ОС - как вариант можно так:
ver | findstr /IL "5.0." > nul
if %errorlevel% equ 0 goto 2000          Rem "Windows 2000"
ver | findstr /IL "5.1." > nul
if %errorlevel% equ 0 goto XP             Rem "Windows XP"
ver | findstr /IL "5.2." > nul
if %errorlevel% equ 0 goto 2003          Rem "Windows 2003"
ver | findstr /IL "6.0." > nul
if %errorlevel% equ 0 goto Vista          Rem "Windows Vista"
ver | findstr /IL "6.1." > nul
if %errorlevel% equ 0 goto Win7          Rem "Windows 7"
ver | findstr /IL "6.2." > nul
if %errorlevel% equ 0 goto Win8          Rem "Windows 8"
ver | findstr /IL "6.3." >nul
if %errorlevel% equ 0 goto Win81        Rem "Windows 8.1"
ver | findstr /IL "10.0." >nul
if %errorlevel% equ 0 goto Win10        Rem "Windows 10"
:2000
.........
:XP
.........
:2003
.........
:Vista
.........
:Win7
.........
:Win8
.........
:Win81
cd /D "%~dp0"
if exist "%ProgramFiles(x86)%" (
  start /d"%~dp0" файлx64.exe %*
) else (
  start /d"%~dp0" файлx32.exe %*
)
.........
:Win10
.........


Последний раз редактировалось: Gvint64 (2021-06-21 20:17), всего редактировалось 2 раз(а)

[Цитировать]

    Ander_73
  • 15549
  • Стаж: 7 лет 2 месяца
  • Сообщений: 3605
  • Репутация:127

    [+] [-]
Gvint64,
for %%i in (5.0 5.1 5.2 6.0 6.1 6.2 6.3 10.0) do ver| >nul find "%%i"&& goto %%i
exit
:6.1
echo Win7

[Цитировать]

    Gvint64
  • 24573
  • Стаж: 3 года 11 месяцев
  • Сообщений: 568
  • Репутация:63

    [+] [-]
Ander_73, aa Спасибо! Самое правильное решение.

[Цитировать]

    wadimus
  • 14910
  • Стаж: 7 лет 4 месяца
  • Сообщений: 762
  • Репутация:91

    [+] [-]
86442
if exist "%ProgramFiles(x86)%" (
  start /d"%~dp0" файлx64.exe %*
) else (
  start /d"%~dp0" файлx32.exe %*
)
если подобный батник будет запускаться из-под 32х-битной программы, то переход на 64х-битую ветку не будет.
вот все перешли на sfx-exe комбайны с менюшками выбора программ, в которых используется лаунчер (Launcher.exe) - он 32х-битный.
так правильнее:
if defined ProgramW6432 (
проверил на своём репаке 1С.
ИМХО, неправ af

[Цитировать]

    Ander_73
  • 15549
  • Стаж: 7 лет 2 месяца
  • Сообщений: 3605
  • Репутация:127

    [+] [-]
86447ProgramW6432
Это не работает для Висты и, скорее всего, для ХР х64 (но тут просто не знаю).
Переменная введена в "семёрке".

[Цитировать]

    wadimus
  • 14910
  • Стаж: 7 лет 4 месяца
  • Сообщений: 762
  • Репутация:91

    [+] [-]
86450ProgramW6432
%ProgramW6432%
Эта переменная используется уровнем эмуляции WOW64 и присутствует только в 64-битных версиях Windows.
Значения по умолчанию
Windows Vista / 7/8/10: %SystemDrive%\Program Files
про ХР согласен .. но за покойниках не говорю ah

[Цитировать]

    Ander_73
  • 15549
  • Стаж: 7 лет 2 месяца
  • Сообщений: 3605
  • Репутация:127

    [+] [-]
wadimus, что я сказал непонятного? Это НЕ РАБОТАЕТ в Висте.
The ProgramW6432 and CommonProgramW6432 environment variables were added starting with Windows 7 and Windows Server 2008 R2.
Ссылка

[Цитировать]

    wadimus
  • 14910
  • Стаж: 7 лет 4 месяца
  • Сообщений: 762
  • Репутация:91

    [+] [-]
согласен .. но за покойниках не говорю
ЗЫ. ваш какой способ определения разрядности?

[Цитировать]

    Ander_73
  • 15549
  • Стаж: 7 лет 2 месяца
  • Сообщений: 3605
  • Репутация:127

    [+] [-]
86458за покойниках не говорю
В условиях задачи перечисление ОС начиналось с ХР. Решение должно удовлетворять условиям, а не отменять их.
86458ваш какой способ определения разрядности?
Ты вроде с 16-го тут сидишь! Сто раз уже приводилось стандартное решение:
set xOS=64& if %PROCESSOR_ARCHITECTURE%==x86 if not defined PROCESSOR_ARCHITEW6432 set xOS=86

[Цитировать]

    wadimus
  • 14910
  • Стаж: 7 лет 4 месяца
  • Сообщений: 762
  • Репутация:91

    [+] [-]
86460Ты вроде с 16-го тут сидишь!
я сижу тут? .. 5 лет .. az
86460Сто раз уже приводилось стандартное решение
ты же списиалист нестандартных решений .. решил спросить .. думаю, зря

[Цитировать]

    Alex34234235
  • 28113
  • Стаж: 2 года 10 месяцев
  • Сообщений: 8
  • Репутация:0

    [+] [-]
Сделал так:
for %%i in (5.0 5.1 5.2 6.0 6.1 6.2 6.3 10.0) do ver| >nul find "%%i"&& goto %%i
exit
:5.1
echo WinXP
If !%PROCESSOR_ARCHITECTURE%==!x86 Goto Start_x86
If !%PROCESSOR_ARCHITECTURE%==!AMD64 Goto Start_x64
Goto End
:Start_x86
Start "Firefox" SumatraPDF-3.1.2-install.exe -s
Goto End
:End
:5.2
echo WinXPx64
If !%PROCESSOR_ARCHITECTURE%==!x86 Goto Start_x86
If !%PROCESSOR_ARCHITECTURE%==!AMD64 Goto Start_x64
Goto End
:Start_x86
Start "Firefox" SumatraPDF-3.2-install.exe -s
Goto End
:Start_x64
Start "Firefox" SumatraPDF-3.2-64-install.exe -s
Goto End
:End
:6.0
echo WinVista
If !%PROCESSOR_ARCHITECTURE%==!x86 Goto Start_x86
If !%PROCESSOR_ARCHITECTURE%==!AMD64 Goto Start_x64
Goto End
:Start_x86
Start "Firefox" SumatraPDF-3.2-install.exe -s
Goto End
:Start_x64
Start "Firefox" SumatraPDF-3.2-64-install.exe -s
Goto End
:End
:6.1
echo Win7
If !%PROCESSOR_ARCHITECTURE%==!x86 Goto Start_x86
If !%PROCESSOR_ARCHITECTURE%==!AMD64 Goto Start_x64
Goto End
:Start_x86
Start "Firefox" SumatraPDF-3.2-install.exe -s
Goto End
:Start_x64
Start "Firefox" SumatraPDF-3.2-64-install.exe -s
Goto End
:End
:6.2
echo Win8
If !%PROCESSOR_ARCHITECTURE%==!x86 Goto Start_x86
If !%PROCESSOR_ARCHITECTURE%==!AMD64 Goto Start_x64
Goto End
:Start_x86
Start "Firefox" SumatraPDF-3.2-install.exe -s
Goto End
:Start_x64
Start "Firefox" SumatraPDF-3.2-64-install.exe -s
Goto End
:End
:6.3
echo Win8.1
If !%PROCESSOR_ARCHITECTURE%==!x86 Goto Start_x86
If !%PROCESSOR_ARCHITECTURE%==!AMD64 Goto Start_x64
Goto End
:Start_x86
Start "Firefox" SumatraPDF-3.2-install.exe -s
Goto End
:Start_x64
Start "Firefox" SumatraPDF-3.2-64-install.exe -s
Goto End
:End
:10.0
echo Win10
If !%PROCESSOR_ARCHITECTURE%==!x86 Goto Start_x86
If !%PROCESSOR_ARCHITECTURE%==!AMD64 Goto Start_x64
Goto End
:Start_x86
Start "Firefox" SumatraPDF-3.2-install.exe -s
Goto End
:Start_x64
Start "Firefox" SumatraPDF-3.2-64-install.exe -s
Goto End
:End
Протестил в Win7 x86 и x64, а также WinXp x86, установка производится, однако он продолжает дальше пытаться поставить той же битности, хотя версия винды уже другая.
Как реализовать так, что бы выполнялась только часть соответствующая системе в которой он выполняется? понимаю что проблема в Goto End, однако как это обыграть не понимаю.

[Цитировать]

    Gvint64
  • 24573
  • Стаж: 3 года 11 месяцев
  • Сообщений: 568
  • Репутация:63

    [+] [-]
Alex34234235
:6.1
echo Win7
If !%PROCESSOR_ARCHITECTURE%==!x86 Goto Start_x86
If !%PROCESSOR_ARCHITECTURE%==!AMD64 Goto Start_x64
Goto End
:Start_x86
Start "Firefox" SumatraPDF-3.2-install.exe -s
Goto End
:Start_x64
Start "Firefox" SumatraPDF-3.2-64-install.exe -s
Goto End
:End
Как-то так.
:6.1
echo Win7
If !%PROCESSOR_ARCHITECTURE%==!x86 Goto Start_x86
If !%PROCESSOR_ARCHITECTURE%==!AMD64 Goto Start_x64
:Start_x86
Start /wait "Firefox" SumatraPDF-3.2-install.exe -s
exit
:Start_x64
Start /wait "Firefox" SumatraPDF-3.2-64-install.exe -s
exit


Последний раз редактировалось: Gvint64 (2021-06-18 19:34), всего редактировалось 1 раз

[Цитировать]

    korsak7
  • 107
  • Стаж: 9 лет 4 месяца
  • Сообщений: 1082
  • Репутация:62

    [+] [-]
Такой код проще убить чем прокормить исправить ag
If !%PROCESSOR_ARCHITECTURE%==!x86 Goto Start_x86
If !%PROCESSOR_ARCHITECTURE%==!AMD64 Goto Start_x64
Тогда уж для полного счастья и это нужно в начало батника унести

Страница 54 из 89


Показать сообщения:    

Текущее время: 19-Апр 18:51

Часовой пояс: UTC + 3


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете голосовать в опросах
Вы не можете прикреплять файлы к сообщениям
Вы можете скачивать файлы