Страница 1 из 2

Системная переменная, зависимая от разрядности ОС

Добавлено: Вт фев 12, 2013 00:24
Mellomann
Есть нечто такого вида: "%PROCESSOR_ARCHITECTURE%" на моей системе возвращает либо "x86" на 32-битной ОС, либо "AMD64" на 64. Всё понятно и логично до тех пор, пока у меня амдовский проц.

Вопрос знатокам от телезрителей:
Какой вариант мне вернёт эта переменная на интеловском проце под х64 ОС и могут ли быть ещё какие-то нестандартные варианты кроме "x86" и "AMD64"? на моей системе возвращает либо

p/s
Всё это добро я планирую использовать в кнопках и меню Тотала, например, для вызова соответствующего варианта AkelPad, RAR и т.п. прог, доступ которых периодически мне нужен к системной папке (тут без х64 никак), но и чтобы ради соседней х86 винды не переписывать ту же конфигу.

Добавлено: Вт фев 12, 2013 00:28
jentoso
Mellomann, WIndows 6 64-bit, %PROCESSOR_ARCHITECTURE% - AMD64. Процессор Intel Core i5

Добавлено: Вт фев 12, 2013 08:44
GGS
Значение %PROCESSOR_ARCHITECTURE% зависит от запускаемого cmd.exe (32/64)
Выполните (Win+R) две команды:

Код: Выделить всё

C:\Windows\System32\cmd.exe /c set>C:\1.txt
C:\Windows\SysWOW64\cmd.exe /c set>C:\2.txt
и сравните 1.txt с 2.txt

Добавлено: Вт фев 12, 2013 08:56
Avada
Тема перенесена в "Программное обеспечение", поскольку сама обсуждаемая системная переменная к TC как таковому отношения не имеет (как её предполагается там использовать — вопрос второй).

Добавлено: Вт фев 12, 2013 12:43
Flasher

Добавлено: Вт фев 12, 2013 21:32
Mellomann
Flasher
Странно, но поиск мне ту тему так и не дал вначале...
GGS писал(а):Значение %PROCESSOR_ARCHITECTURE% зависит от запускаемого cmd.exe
М-да... облом.

Как тогда можно иначе задать безусловное определение разрядности винды? Чтоб наверняка (либо 32, либо 64) и без всяких подпунктов, зависимостей...

Добавлено: Вт фев 12, 2013 22:43
MVV
Mellomann,
Можно тупо:

Код: Выделить всё

if exist "%SystemRoot%\SysWOW64" ...
Ещё вариант - определить несколько коротких переменных, задающих различия путей к 32-битному экзешнику от пути к 64-битному, например:

Код: Выделить всё

If %SYSINFO_OSARCH% = 64 Then
	SetEnv X64 X64.
Else
	SetEnv X64 .
EndIf
А в кнопке:

Код: Выделить всё

...\RegWorkshop\RegWorkshop%X64%exe
Проблема тут в том, что переменная должна быть непустой, иначе она тупо не раскроется. Можно вообще целиком путь к экзешнику в переменную запихивать и в кнопке просто переменную прописывать.

Код: Выделить всё

If %SYSINFO_OSARCH% = 64 Then
	SetEnv COMMANDER_RegWorkshop ...\RegWorkshop\RegWorkshopX64.exe
Else
	SetEnv COMMANDER_RegWorkshop ...\RegWorkshop\RegWorkshop.exe
EndIf

Код: Выделить всё

%COMMANDER_RegWorkshop%

Добавлено: Вт фев 12, 2013 23:19
Mellomann
MVV
мне бы отделаться чем-то в таком конечном виде, например:
<...>\\Akelpad_%bit%\\Akelpad.exe

Добавлено: Вт фев 12, 2013 23:32
Flasher
Mellomann
В теме по моей ссылке разве не о том речь (с применением Autorun)?

Добавлено: Ср фев 13, 2013 00:16
Mellomann
Flasher
перетаскивание файла на такую кнопку не откроет файл в нужной проге

Добавлено: Ср фев 13, 2013 00:17
Flasher
Mellomann
А зачем лишние движения? Нажать на кнопку быстрей и легче, чем тащить до неё.

Добавлено: Ср фев 13, 2013 00:39
Mellomann
Flasher
не всегда нужный файл ассоциирован именно с этой прогой, и далеко не все файлы (иногда нужных расширений) нуждаются в этой асс-и.

Добавлено: Ср фев 13, 2013 00:44
Flasher
Mellomann
Как связано с ассоциацией то, что я написал?
А из батника ты ещё можешь так вытащить: wmic os get osarchitecture

Добавлено: Ср фев 13, 2013 09:12
MVV
Flasher,
По-моему, вариант с проверкой существования SysWOW64 куда проще - особенно если сравнивать скорость выполнения.
Mellomann писал(а):мне бы отделаться чем-то в таком конечном виде, например:
<...>\\Akelpad_%bit%\\Akelpad.exe
Ну так и определи эту переменную bit в Autorun для каждой разрядности процессора. Главное, чтобы оба значения переменной были непустыми.

Добавлено: Ср фев 13, 2013 12:24
Flasher
MVV
Чем же проще, если в Autorun уже есть внутренняя переменная?