Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Автоматическая установка Windows 2000/XP/2003 (http://forum.oszone.net/forumdisplay.php?f=32)
-   -   [решено] Автоматическое определение типа ОС - 32 или 64 бит. (http://forum.oszone.net/showthread.php?t=142096)

LonerD 07-06-2009 14:32 1137393

Автоматическое определение типа ОС - 32 или 64 бит.
 
Возникла надобность сделать автоматическую установку приложений с автоматическим определением битности системы - 32 или 64 бит.
Пример. Запускается .bat- или .сmd-файл.
Если ОС 32-битная, то устанавливаются vcredist_2005.exe и vcredist_2008.exe.
Если ОС 64-битная, то устанавливаются vcredist_x64_2005.exe и vcredist_x64_2008.exe

Кто знает как это оформить?

Petya V4sechkin 07-06-2009 15:44 1137444

DPavlik82, можно по наличию переменных типа ProgramW6432 (которые есть только в 64-битных системах).
Код:

If "%ProgramW6432%" Neq "" Echo Это 64-битная ОС

LonerD 07-06-2009 21:11 1137682

Petya V4sechkin, спасибо, попробую

LonerD 17-06-2009 14:02 1145028

Petya V4sechkin,
Попробовал - не помогло. Вот такая комманда (проверяется, если 64-битная, то запускается vcredist_x64_2005.exe)
Код:

If "%ProgramW6432%" Neq "" vcredist_x64_2005.exe
Запускаю указанную строчку из коммандной строки на 32-битной ХР, - все равно начинается установка vcredist_x64_2005.exe.
Если создаю cmd-файл с указанным содержимым, то вообще ничего не пытается установиться.


Вот такой вариант тоже ни к чему не приводит:
Код:

If "%ProgramW6432%" Neq "" <vcredist_x64_2005.exe> else vcredist_x86_2005.exe
Из cmd вообще никак не реагирует, а из коммандной строки на 32-битной системе тоже запускается vcredist_x64_2005.exe, еще вдобавок создается пустой файл else.

Petya V4sechkin 17-06-2009 15:10 1145100

DPavlik82, прошу прощения, судя по этой ссылке переменная ProgramW6432 есть только в Windows 7 и Server 2008 R2.
Код:

If "%PROCESSOR_ARCHITECTURE%"=="x86" (
  Start /Wait vcredist_x86_2005.exe
) Else (
  Start /Wait vcredist_x64_2005.exe
)

Цитата:

Цитата DPavlik82
создаю cmd-файл

Разумеется, cmd-файл.

LonerD 18-06-2009 10:05 1145743

Petya V4sechkin, не-а, и этот вариант не отработал.
И под 32-битной ХР, и под 64-битной семеркой запускается установка vcredist_x86_2005.exe.
А на заднем плане в обоих операционках красуется окно консоли с фразой:
Код:

If "x86"=="x86" (Start /Wait vcredist_x86_2005.exe) Else (Start /Wait vcredist_x64_2005.exe)

Petya V4sechkin 18-06-2009 10:12 1145745

DPavlik82, выложите результаты выполнения команды Set.

Litstat 21-06-2009 20:48 1148348

Код:

IF EXIST "%ProgramFiles(x86)%" (ОС 64-битная, а проверяемая папка для 32-х битных программ)

Devils0411 28-06-2009 21:19 1154098

Встала такая же ситуация. Сделал код вот так:
Код:

If exist "%programfiles(x86)% (
start /wait "%programfiles(x86)%\tftpd32\unins000.exe /Silent"
) else (
start /wait "%programfiles%\tftpd32\unins000.exe /Silent"
)

Не проверяет. Т.е. приложение не запускается.

oszip 28-06-2009 21:59 1154135

Видимо прикол состоит в том, что если запускать этот bat- Или cmd- файл из-под 32-битного FAR в 64-битной системе, то переменная PROCESSOR_ARCHITECTURE имеет значение "x86", так как FAR-то 32-битный :)

Devils0411 28-06-2009 22:04 1154141

oszip, Кому адрессовано это сообщение? И причем здесь FAR? В данном топике я вообще не вижу упоминания FAR'а

Litstat 28-06-2009 23:59 1154252

Devils0411, очепятка вкралась, когда сюда копировали, или такой же bat-ник запускали?
Код:

If exist "%programfiles(x86)%" (

Devils0411 29-06-2009 00:11 1154267

Litstat, пробЫвал по-разному . И с ковычками и без. Толку ни какого. Батник запускается и через время открывает еще одно окно и оно весит, но не в прямом смысле. В нем можно вводить команды.

Dmitry_K 29-06-2009 00:54 1154286

Цитата:

Цитата Devils0411
Litstat, пробЫвал по-разному . И с ковычками и без. Толку ни какого. Батник запускается и через время открывает еще одно окно и оно весит, но не в прямом смысле. В нем можно вводить команды. »

все правильно, потому что просто переменной %programfiles(x86)% в 32-битной системе не существует (все переменные можно посмотреть командой set, введя ее консольном окне или перенаправить вывод в файл командой cmd /c set > %systemdrive%\set.txt), что и попросил сделать
Цитата:

Цитата Petya V4sechkin
DPavlik82, выложите результаты выполнения команды Set. »

и в приведенной им ссылке написаны условия создания переменных (над таблицей)
Цитата:

Цитата http://msdn.microsoft.com/en-us/library/aa384274(VS.85).aspx
When a 32-bit process is created by a 64-bit process, or when a 64-bit process is created by a 32-bit process, WOW64 sets the environment variables for the created process as shown in the following table.

Когда 32-битный процесс создан 64-битным процессом или когда 64-битный процесс создан 32-битным процессом, WOW64 устанавливает переменные окружения для созданного процесса, как приведено в следующей таблице...

Devils0411 29-06-2009 01:16 1154295

Цитата:

Цитата Dmitry_K
переменной %programfiles(x86)% в 32-битной системе не существует »

это понятно. Но с чего вы взяли что я запускаю батник на 32-битной системе? Мне нужно чтоб если батник (Не зависимо от того, в какой ОС он запускается) не находит папку %programfiles(x86)%, а значит батник запускает из под 32-битной системы, то переходил к следующей команде. А если находит, соответственно выполняет необходимую команду (значит запущен из под 64-битной системы.
Код:

ALLUSERSPROFILE=C:\Documents and Settings\All Users
APPDATA=C:\Documents and Settings\Ђ¤¬Ё*Ёбва*в®а\Application Data
ClusterLog=C:\WINDOWS\Cluster\cluster.log
CommonProgramFiles=C:\Program Files\Common Files
CommonProgramFiles(x86)=C:\Program Files (x86)\Common Files
ComSpec=C:\WINDOWS\system32\cmd.exe
DEVMGR_SHOW_DETAILS=
DEVMGR_SHOW_NONPRESENT_DEVICES=1
FP_NO_HOST_CHECK=NO
HOMEDRIVE=D:
NUMBER_OF_PROCESSORS=2
OS=Windows_NT
Path=C:\WINDOWS\system32;C:\WINDOWS;C:\WINDOWS\System32\Wbem;C:\WINDOWS\system32\WindowsPowerShell\v1.0;
PATHEXT=.COM;.EXE;.BAT;.CMD;.VBS;.VBE;.JS;.JSE;.WSF;.WSH;.PSC1
PROCESSOR_ARCHITECTURE=AMD64
PROCESSOR_IDENTIFIER=EM64T Family 15 Model 4 Stepping 9, GenuineIntel
PROCESSOR_LEVEL=15
PROCESSOR_REVISION=0409
ProgramFiles=C:\Program Files
ProgramFiles(x86)=C:\Program Files (x86)
PROMPT=$P$G
SESSIONNAME=RDP-Tcp#1
SystemDrive=C:
SystemRoot=C:\WINDOWS
TEMP=C:\WINDOWS\TEMP\1
TMP=C:\WINDOWS\TEMP\1
USERNAME=Ђ¤¬Ё*Ёбва*в®а
USERPROFILE=C:\Documents and Settings\Ђ¤¬Ё*Ёбва*в®а
windir=C:\WINDOWS

Да и кстати, если я правильно понимаю, то PROCESSOR_ARCHITECTURE=AMD64 всегда будет равнятся этому значению. если соответственно процессор подерживает 64 разряда.

Litstat 29-06-2009 01:22 1154298

Попробовал, все работает. У меня 64х-битная система. На обычной тоже работать будет, но при проверке переменной %ProgramFiles(x86)% нужно ELSE добавить.
В C:\Program Files (x86)\ создал батник pf32.bat:
Код:

@ECHO off

ECHO Hello! I'm 32-bit directory. My options is %*
pause >> nul

В другой папке на другом диске создал запускающий батник:
Код:

@ECHO off

IF EXIST "%ProgramFiles(x86)%" (
  start /wait /D "%ProgramFiles(x86)%" pf32.bat /silent
  start "Uninstalling DMaster..." /wait "%ProgramFiles(x86)%\Download Master\unins000.exe" /silent
)
pause >> nul

1) Первый start запускает батник pf32.bat: он выполнился в новой консоли и выдал:
Код:

Hello! I'm 32-bit directory. My options is /silent
2) Второй start - удаление программы. В данном случае после "start" нужно задать в кавычках заголовок нового окна (к примеру, "Uninstalling DMaster..."), иначе этот "start" примет за него все то в кавычках, что после /wait. Поэтому запускать и не получалось - у вас, Devils0411, выскакивала пустая консоль с именем "%programfiles(x86)%\tftpd32\unins000.exe /Silent", можете проверить.

3) Можно экзешники запускать и без "start", работает:
Код:

"%ProgramFiles(x86)%\Download Master\unins000.exe" /silent
4) Dmitry_K, то, что переменной не существует, еще не значит, что не будет работать батник. Условие типа: IF EXIST "%abracadabra%" ECHO abacadabra - отрабатывает верно, т.е. в консоль ничего не выведено. Если же ввести что-то осмысленное: IF EXIST "%ProgramFiles%" ECHO %ProgramFiles% - то в консоли увидим путь к программам.

Litstat 29-06-2009 01:37 1154302

Цитата:

Цитата Dmitry_K
можно попробывать вариант
Код:
if exist "%systemdrive%\Program Files (x86)" »

А если програм файлс перемещены на несистемный раздел?

Devils0411 29-06-2009 01:44 1154307

Litstat, Заработало. Единственное запускал на 64-битной оси. На 32-битной проверить не могу. На ноуте, на сервере, и на настольнике стоят 64-битные оси :)
Кому интересно вот код.
Код:

IF EXIST "%ProgramFiles(x86)%" (
  start "Uninstalling tftpd Server..." /wait "%programfiles(x86)%\tftpd32\unins000.exe" /silent
) else ( start /wait "%programfiles%\tftpd32\unins000.exe" /silent
)

Dmitry_K, а зачем усложнять жизнь?
Цитата:

Цитата Dmitry_K
if exist "%systemdrive%\Program Files (x86)" »

Цитата:

Цитата Litstat
А если програм файлс перемещены на несистемный раздел? »

Согласен. Всякое ведь может быть.
Всем большое спасибо за помощь. Буду дальше дорабатывать свой проект :)

Litstat 29-06-2009 01:53 1154314

Цитата:

Цитата Devils0411
Кому интересно вот код.
Код:
IF EXIST "%ProgramFiles(x86)%" (
start "Uninstalling tftpd Server..." /wait "%programfiles(x86)%\tftpd32\unins000.exe" /silent
) else ( start /wait "%programfiles%\tftpd32\unins000.exe" /silent
) »

Для IF исправили, а для ELSE нет :gamer:
Код:

IF EXIST "%ProgramFiles(x86)%" (
  start "Uninstalling tftpd Server..." /wait "%programfiles(x86)%\tftpd32\unins000.exe" /silent
) else (
  start "Uninstalling tftpd Server..." /wait "%programfiles%\tftpd32\unins000.exe" /silent
)


Devils0411 29-06-2009 01:57 1154316

Litstat, верно. Если бы запустил на 32-битной оси, то выдал бы ошибку.

LonerD 30-06-2009 14:18 1155473

Цитата:

Цитата Petya V4sechkin
выложите результаты выполнения команды Set. »

Сразу не вышло - не было доступа к 64-битной системе.
Прикрепляю к сообщению скрины выполнения команды и результаты выполнения. В обоих случаях запускался файл 32-битный .

Цитата:

Цитата Litstat
IF EXIST "%ProgramFiles(x86)%" (ОС 64-битная, а проверяемая папка для 32-х битных программ) »

А вот этот вариант сработал!!! Спасибо.

Devils0411 30-06-2009 15:37 1155538

DPavlik82, а скрипт то где? Выкладываю свой вариант скрипта.
Первый вариант выполняет добавления значения в реестр при заданных условиях.
Второй вариант выполняет запуск приложения при заданных условиях

Petya V4sechkin 30-06-2009 17:18 1155619

Цитата:

Цитата DPavlik82
В обоих случаях запускался файл 32-битный .

Скрипт написали неправильно (судя по скриншоту, в одну строчку).

omich 30-04-2010 08:00 1403844

А как должен выглядеть скрипт для определения системы (XP и семерки, если обе х32)?
Возможно ли назначить выполнение той или иной команды в зависимости от системы?
(При установке Office 2003 использую разные *.MST)

Petya V4sechkin 30-04-2010 09:23 1403878

Цитата:

Цитата omich
А как должен выглядеть скрипт для определения системы

[решено] Определение версии (сборки) и сервис пака ОС

Shpindler 13-03-2012 19:53 1878530

Цитата:

Цитата Devils0411
DPavlik82, а скрипт то где? Выкладываю свой вариант скрипта.
Первый вариант выполняет добавления значения в реестр при заданных условиях.
Второй вариант выполняет запуск приложения при заданных условиях »

Можете перезалить? Файл удален...

gora 21-03-2012 15:16 1883942

Такой вариант здесь не видел, но сам пользуюсь именно им
Код:

Set xOS=x86& If Defined PROCESSOR_ARCHITEW6432 (Set xOS=x64) Else If "%PROCESSOR_ARCHITECTURE%"=="AMD64" Set xOS=x64
Echo OS - %xOS%


Nun-Nun 21-03-2012 15:59 1883965

Цитата:

Цитата gora
Такой вариант здесь не видел, но сам пользуюсь именно им »

Не перестаю восхищаться Вашим виртуозным владением инструментарием в области bat-программирования!

А ещё очень был бы полезен bat-ник, определяющий не только разрядность ОС, но и тип ОС, например, XP и Win 7. Вышла бы прекрасная заготовка, на основе которой можно было бы другие bat-файлы создавать.

Amigos 21-03-2012 19:05 1884115

Цитата:

Цитата Nun-Nun
at-ник, определяющий не только разрядность ОС, но и тип ОС, например, XP и Win 7. »

Цитата:

Цитата Petya V4sechkin
Цитата:

Цитата omich
А как должен выглядеть скрипт для определения системы »

CMD/BAT - [решено] Определение версии (сборки) и сервис пака ОС


Lucretius 09-04-2013 18:37 2129146

gora, поправьте меня, если я ошибаюсь, но приведённый Вами скрипт:
Цитата:

Цитата gora
Set xOS=x86& If Defined PROCESSOR_ARCHITEW6432 (Set xOS=x64) Else If "%PROCESSOR_ARCHITECTURE%"=="AMD64" Set xOS=x64
Echo OS - %xOS% »

64-разрядную систему на базе Itanium будет определять, как "x86", т.к. при определении разрядности не соблюдается ни одно из условий. Думаю такой вариант будет универсальным:
Код:

Set xOS=x64& If "%PROCESSOR_ARCHITECTURE%"=="x86" (
 If Not Defined PROCESSOR_ARCHITEW6432 Set xOS=x86
)
Echo OS - %xOS%
Pause


gora 12-04-2013 22:02 2131326

Цитата:

Цитата Lucretius
Думаю такой вариант будет универсальным: »

[решено] Как проверить разрядность операционной системы?

y-- 16-06-2013 01:04 2168326

Что-то вы господа обкатываете по-сути один и тот же вариант определения с небольшими вариациями...
Такое впечатление что был произведен массовый частичный копипаст чужого кода ;)
Уж если на то пошло то вот вам полностью другой код - для разнообразия:
PHP код:

ECHO "%PROCESSOR_ARCHITECTURE%""%PROCESSOR_ARCHITEW6432%"|1>NUL 2>NUL FIND /"64"&&SET "MY_SYSTEM=X64"||SET "MY_SYSTEM=X86" 


Iska 16-06-2013 01:50 2168336

Цитата:

Цитата y--
Уж если на то пошло то вот вам полностью другой код - для разнообразия »

y--, Вы тему читать не пробовали предварительно — для разнообразия?

y-- 16-06-2013 10:48 2168446

Iska,
Конечно читал ;)
вместо rвместо SET в мой код можно подставить нужный код. То есть вместо
SET "MY_SYSTEM=X86"
используем
(start /wait vcredist_2005.exe&start /wait vcredist_2008.exe)
И соответственно
вместо
SET "MY_SYSTEM=X64"
(start /wait vcredist_x64_2005.exe&start /wait vcredist_x64_2008.exe

А что не так с моим ответом? Без IF код тут никто не предлагал...
Или Вас лично вводит в заблуждение использованный тег PHP?
Так я тут новичек, а коды всплывающих подсказок не имеют, но не переживайте - код заведомо CMD.

padrus 19-08-2013 11:35 2203982

проверку с последующей установкой запилил так:
Код:

rem Winrar

ECHO Installing WinRar
ECHO Пожалуйста, подождите...
IF EXIST "%ProgramFiles(x86)%" (
  start /wait N:\\%netinstalldir%\winrar4\winrarx64.exe /s
) else (
  start /wait N:\\%netinstalldir%\\winrar4\winrarx32.exe /s
)
ECHO установка WinRar завершена

Теперь немогу решить как удобнее добавить проверку установлено ли приложение.
в т.ч. по наличию определенного файла в директории, либо по записи в реестре.
У кого какие могут быть идеи?

Сrack 19-08-2013 13:01 2204025

padrus, для создания универсальных (для разных ОС) инсталляторов я использую утилиту http://forum.oszone.net/thread-264841.html
в ней так же есть проверка на наличие файла.


Время: 15:29.

Время: 15:29.
© OSzone.net 2001-