Показать полную графическую версию : [решено] Определить разрядность системы и соответственно выполнить скрипт.
turbolover
25-06-2016, 15:23
Вопрос- как определить разрядность системы, и выполнить соответствующий скрипт.
Так будет правильно?
@Echo Off
If !%PROCESSOR_ARCHITECTURE%==!x86 Goto Start_x86
If !%PROCESSOR_ARCHITECTURE%==!AMD64 Goto Start_x64
Goto End
:Start_x86
Start "Firefox" "%Systemdrive%\Program Files\Mozilla Firefox\Firefox.exe" -private"
Goto End
:Start_x64
Start "Firefox" "%Systemdrive%\Program Files (x86)\Mozilla Firefox\Firefox.exe" -private"
Goto End
:End
Foreigner
25-06-2016, 16:17
Может просто так?
start firefox
start iexplore
У меня отрабатывает без путей, хотя в %PATH% не прописаны. Нужно разобраться, что там еще есть в:
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\App Paths
PS. ключи -private и -privatewindow не отрабатывают, браузер запускается в обычном режиме.
turbolover
25-06-2016, 16:22
PS. ключи -private и -privatewindow не отрабатывают, браузер запускается в обычном режиме. »
не отрабатывают потому что надо вырубить "Firefox", и потом запускать скрипт.
Foreigner
25-06-2016, 16:30
turbolover, С перезапуском работает. Разрядность можно проверить наличием переменной %ProgramFiles(x86)% или значением %PROCESSOR_ARCHITECTURE%:
if defined ProgramFiles(x86) echo x64
if "%PROCESSOR_ARCHITECTURE%"=="AMD64" echo x64
Powershell:
if ([intptr]::size -eq 8) { 'x64' }
Foreigner, есть ещё зависимость из-под какой подсистемы исполнять это. Уже обсуждалось ранее.
Foreigner
25-06-2016, 17:12
Iska, С %PROCESSOR_ARCHITECTURE% согласен. Но %ProgramFiles(x86)% зависит не от подсистемы, а от разрядности системы.
Foreigner, вообще-то, по большому, гамбургскому счёту — нет, не зависит. Точнее, только наличие данного каталога не даёт абсолютной гарантии, что ОС — x64.
Foreigner
25-06-2016, 19:49
Iska, да и наличие каталога не дает гарантии.. Наверное нет решения )))
Ну, меня вариант коллеги gora в принципе устраивает.
greg zakharov
26-06-2016, 10:07
А как на счет определения разрядности системы по типу explorer.exe? В смысле прочитать поле MachineType самого PE:
@echo off
setlocal enabledelayedexpansion
rem получаем полный путь до explorer.exe
for %%i in (explorer.exe) do (
if exist "%%~$PATH:i" (
rem ищем в PE поле e_lfanew структуры IMAGE_DOS_HEADER
rem длина поля равна четырем байтам, смещение 0x3C
for %%j in (C D E F) do (
for /f "tokens=2" %%k in (
'fc /b "%%~$PATH:i" "%~f0" ^| findstr /rc:"03%%j:"'
) do set "ofs=%%k!ofs!"
)
rem пропускаем сигнатуру PE\x00\x00
set /a "ofs=0x!ofs!+4"
rem получаем адреса двух байтов поля MachineType
rem структуры IMAGE_FILE_HEADER и создаем из них
rem строку - эдакий regexp для findstr
for /l %%j in (0, 1, 1) do (
cmd /c exit /b !ofs!
set "str=!str!!=exitcode! "
set /a "ofs+=1"
)
rem читаем значения поля MachineType
for /f "tokens=2" %%j in (
'fc /b "%%~$PATH:i" "%~f0" ^| findstr "!str:~0,-1!"'
) do set "mt=%%j!mt!"
if "!mt!" equ "014C" echo:x86
if "!mt!" equ "8664" echo:x64
)
)
endlocal
exit /b
А если не усложнять:
wmic os get osarchitecture
А так?
@echo off
for /f "tokens=2 delims=:" %%a in ('"systeminfo|more +14|set/p x=^& cmd/v/c echo !x: =!"') do echo %%a|find/i "x86" && echo x86
pause>nul
.
© OSzone.net 2001-2012
vBulletin v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.