Показать полную графическую версию : [решено] Как проверить разрядность операционной системы?
SvoiLudi
08-04-2010, 22:50
Как проверить разрядность операционной системы?
У виндоуз 7 есть 2 версии: 64-х разрядная и 32-х разрядная.
Для 64-х разрядной нужно, чтобы выполнялись дополнительные программы. Как это сделать в коммандом файле?
SvoiLudi
08-04-2010, 22:52
в реестре ветки добавляются у 64-х, но как проверить?
@Echo Off
:: Варианит 1
Set xOS=x64
If "%PROCESSOR_ARCHITECTURE%"=="x86" If Not Defined PROCESSOR_ARCHITEW6432 Set xOS=x86
Echo %xOS%
Pause
:: ===================================================================================
:: Варианит 2
Set xOS=x86
If Defined PROCESSOR_ARCHITEW6432 (Set xOS=x64) Else If "%PROCESSOR_ARCHITECTURE%"=="AMD64" Set xOS=x64
Echo %xOS%
Pause
:: ===================================================================================
:: Запуск приложений в зависимости от разрядности из разных папок с именами x64 и x86
Set xOS=x64
If "%PROCESSOR_ARCHITECTURE%"=="x86" If Not Defined PROCESSOR_ARCHITEW6432 Set xOS=x86
"c:\My Test\%xOS%\install.exe" /S
:: ===================================================================================
:: Запуск приложений в зависимости от разрядности из одной папки с именами сожержащими суффикс x64 и x86 (install_x64.exe и install_x86.exe)
Set xOS=x64
If "%PROCESSOR_ARCHITECTURE%"=="x86" If Not Defined PROCESSOR_ARCHITEW6432 Set xOS=x86
"c:\My Test\install_%xOS%.exe" /S
:: ===================================================================================
:: Запуск приложений в зависимости от разрядности из разных папок, с разными именами и/или ключами
Set xOS=x64
If "%PROCESSOR_ARCHITECTURE%"=="x86" If Not Defined PROCESSOR_ARCHITEW6432 Set xOS=x86
If %xOS%==x86 ("c:\My Test\i86\install.exe" /S) Else ("c:\My Test\AMD64\setup.msi" /qn)
Так покороче:
set xOS=x86
if DEFINED ProgramFiles(x86) set xOS=x64
Возможно, вариант, предложенный gora, корректнее, но я не видел 32-битных систем с определенной системной переменной ProgramFiles(x86) и во всех x64 системах, которые я видел, эта переменная определена. Я определяю именно так.
SvoiLudi
09-04-2010, 14:00
PATH %PATH%;q:;w:;e:;r:;t:;y:;u:;i:;o:;p:;a:;s:;d:;f:;g:;h:;j:;k:;l:;z:\;x:;c:;v:;b:;n:;m:;
"%WINDIR%\regedit.exe" /s 32x.reg
Set xOS=x86
If Defined PROCESSOR_ARCHITEW6432 (Set xOS=x64) Else If "%PROCESSOR_ARCHITECTURE%"=="AMD64" Set xOS=x64
if "%xOS%"=="x64" "%WINDIR%\regedit.exe" /s 64x.reg
в реестр ничего не добавляет, а если убрать /s то предлагает добавить в реестр, что требует действия пользователя, что неудобно. Как убрать запрос?
64x.reg находится на сетевом диске z:\
SvoiLudi, на форуме темы организуются по принципу (http://forum.oszone.net/announcement-102-122.html) ''одна проблема – одна тема''.На Ваш вопрос в заголовке темы ответ уже дан, для нового вопроса откройте новую тему и постарайтесь его правильно сформулировать, примерно так: "Как на 64-разрядной системе внести данные из reg файла, находящегося на сетевом диске z:\, в реестр с помощью bat файла запущенного (откуда? с правами администратора?) в 32 (64)-разрядной среде? Reg файл прикрепил."
Извините, если не в тему, но не получается корректно обработать запуск программы в зависимости от разрядности системы
Пример:
@ECHO OFF
SET ProgName=WinRar
SET ProgVer=4.20 Beta 3
SET FileNameX86=wrar420b3ru.exe
SET FileNameX64=winrar-x64-420b3ru.exe
SET FileName=
SET PFPath=
TITLE %ProgName% %ProgVer%
CLS
COLOR 1A
IF EXIST "%ProgramFiles(x86)%" (
IF DEFINED FileNameX64 (
SET FileName=%FileNameX64%
SET PFPath=%PROGRAMFILES%
) ELSE (
SET FileName=%FileNameX86%
SET PFPath=%PROGRAMFILES(x86)%
)
) ELSE (
SET FileName=%FileNameX86%
SET PFPath=%PROGRAMFILES%
)
ECHO Импорт настроек
ECHO.
regedit /S Settings.reg
ECHO.
START /WAIT %FileName% /S
ECHO Установка завершена
ECHO.
Задача: создать почти универсальный установочный bat-файл. Менять только значение переменных в самом начале
В данном скрипте почему-то съедается скобка в пути у Programm Files (x86
почему-то съедается скобка в пути у Programm Files (x86 »
Попробуйте так:
@ECHO OFF
SET ProgName=WinRar
SET ProgVer=4.20 Beta 3
SET FileNameX86=wrar420b3ru.exe
SET FileNameX64=winrar-x64-420b3ru.exe
SET FileName=
SET PFPath=
TITLE %ProgName% %ProgVer%
CLS
COLOR 1A
Set xOS=x86
If Defined PROCESSOR_ARCHITEW6432 (Set xOS=x64) Else If "%PROCESSOR_ARCHITECTURE%"=="AMD64" Set xOS=x64
SET FileName=%FileNameX86%
SET PFPath=%PROGRAMFILES(x86)%
IF %xOS%==x64 (
IF DEFINED FileNameX64 (
SET FileName=%FileNameX64%
SET PFPath=%PROGRAMFILES%
)
) ELSE (
SET FileName=%FileNameX86%
SET PFPath=%PROGRAMFILES%
)
ECHO PFPath=%PFPath%
ECHO FileName=%FileName%
Pause
Попробуйте так: »
На системе X86 выдёт
всё как и положено, а вот на x64
Выдёт всё равно путь и имя файла как для системы x86 (Program Files (x86) и wrar420b3ru.exe)
Такое ощущение, что условие ELSE срабатывает в любом случае
Пока делаю костыль с добавлением GoTo
Тогда так:@ECHO OFF
SET ProgName=WinRar
SET ProgVer=4.20 Beta 3
SET FileNameX86=wrar420b3ru.exe
SET FileNameX64=winrar-x64-420b3ru.exe
TITLE %ProgName% %ProgVer%
CLS
COLOR 1A
Call :_Set_Var
ECHO xOS=%xOS%
ECHO PFPath=%PFPath%
ECHO FileName=%FileName%
Pause
:_Set_Var
Set xOS=x86
If Defined PROCESSOR_ARCHITEW6432 (Set xOS=x64) Else If "%PROCESSOR_ARCHITECTURE%"=="AMD64" Set xOS=x64
SET FileName=%FileNameX86%
SET PFPath=%PROGRAMFILES%
IF %xOS%==x86 GoTo :EOF
SET PFPath=%PROGRAMFILES(x86)%
IF Not DEFINED FileNameX64 GoTo :EOF
SET FileName=%FileNameX64%
SET PFPath=%ProgramW6432%
GoTo :EOF
Так не должно зависеть от среды запуска (х86\х64) на х64 ОС
День добрый! Подскажите как на основе выше приведенного примера запустить программу driver install.ехе исходя из розрядности из папки х86 или х64?
запустить программу driver install.ехе исходя из розрядности из папки х86 или х64 »
Set xOS=x86
If Defined PROCESSOR_ARCHITEW6432 (Set xOS=x64) Else If "%PROCESSOR_ARCHITECTURE%"=="AMD64" Set xOS=x64
"%xOS%\driver install.ехе"
CyberMuesli
12-06-2012, 18:14
If Defined PROCESSOR_ARCHITEW6432 »
А если на 64-разрядном железе установлена 32 разрядная винда, будет ли определена переменная PROCESSOR_ARCHITEW6432, и чему она будет равна, если да?
Работает но есть одно но, driver install.ехе скомпилирован из *.bat и этот батник запускается и запускает driver install.ехе как бы внутри себя и команды из driver install.ехе не выполняются. За исключением одной
@var WSHShell = WScript.CreateObject( "WScript.Shell" ); > %temp%\mes.js
@WSHShell.Popup( "Установка завершена" ); >> %temp%\mes.js
@START %temp%\mes.js
Foreigner
12-06-2012, 18:28
будет ли определена переменная PROCESSOR_ARCHITE »
Будет равна "x86"
Работает но есть одно но, driver install.ехе скомпилирован из *.bat и этот батник запускается и запускает driver install.ехе как бы внутри себя и команды из driver install.ехе не выполняются. »
Подскажите можно как исправить это?
CyberMuesli
12-06-2012, 19:08
Будет равна "x86" »
Похоже, что нет. Нашел компьютер с Intel Core2 Quad Q9400 с 32-х разрядной версией WinServer 2003. Процессор вроде 64 разрядный, а переменная PROCESSOR_ARCHITEW6432 не определена вообще.
Мне кажется, сам вопрос немного некорректный, надо интересоваться не разрядностью процессора, а разрядностью винды.
Все верно, автор спрашивал как раз то, что нужно
ProgramFiles(x86).... Я определяю именно так. »
Плюсану. Я тоже
а переменная PROCESSOR_ARCHITEW6432 не определена вообще. »
Она может быть не определена, но это не делает строку неработоспособной. В этом случает разрядность определяется по значению переменной %PROCESSOR_ARCHITECTURE%
CyberMuesli
12-06-2012, 19:25
Она может быть не определена, но это не делает строку неработоспособной »
Я не утверждал обратного
Работает но есть одно но, driver install.ехе скомпилирован из *.bat и этот батник запускается и запускает driver install.ехе как бы внутри себя и команды из driver install.ехе не выполняются.
Точнее строки
Set xOS=x86
If Defined PROCESSOR_ARCHITEW6432 (Set xOS=x64) Else If "%PROCESSOR_ARCHITECTURE%"=="AMD64" Set xOS=x64
пишутся уже внутри driver install.ехе, хотя не пойму как и почему.
Парни скажите можно это исправить? А то очень нехочется лепить сложный инсталятор :(
© OSzone.net 2001-2012
vBulletin v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.