Войти

Показать полную графическую версию : [решено] Как проверить разрядность операционной системы?


Страниц : 1 2 3 4 [5] 6

Foreigner
06-02-2021, 09:39
Win32_Processor еще не советовали?


enum Arch
{
x86 = 0
MIPS = 1
Alpha = 2
PowerPC = 3
ia64 = 6
x64 = 9
}

[enum]::GetName([Arch],$((Get-CimInstance win32_Processor).Architecture))
или
[Arch] $((Get-CimInstance win32_Processor).Architecture)

птичка0001
06-02-2021, 13:26
"PROCESSOR_ARCHITECTURE" [...] "PROCESSOR_ARCHITEW6432" [...]

David Wang — HOWTO: Detect Process Bitness | docs.microsoft.com, 2006 г. (https://docs.microsoft.com/en-us/archive/blogs/david.wang/howto-detect-process-bitness)
Identifying the CPU architecture type, SO (https://stackoverflow.com/a/12139504)

UPD: Увидела, Iska уже давал ссылку на David Wang

Iska
06-02-2021, 13:53
Win32_Processor еще не советовали? »
Нет. Тут ведь тема про «Как проверить разрядность операционной системы?», это просто мы далеко от неё «укатились» в исторические экзерсисы ;).

Phoenix
06-02-2021, 16:59
Тут ведь тема про «Как проверить разрядность операционной системы?», это просто мы далеко от неё «укатились» в исторические экзерсисы . »
Простите великодушно, но я вот тут почитал все эти коды, сходил по ссылкам и мне почему-то подумалось об экзорцизме.
Мне кажется, что данными письменами в совокупности с ссылками птычки на скрижали, можно диавола вызывать.

Iska
06-02-2021, 17:01
…и мне почему-то подумалось об экзорцизме. »
В точку, коллега!

Fors1k
09-02-2021, 13:47
pwsh выдает по [Runtime.InteropServices.Marshal]::ReadInt16([IntPtr]0x7FFE026A) именно: 0
а systeminfo это: »
alpap, у тебя так тоже 0 покажет?
cls
&{If(!(GCM WinApi -ea 0)){[Net.ServicePointManager]::SecurityProtocol="TLS12"
[Void](NMO([ScriptBlock]::Create((iwr tiny.one/Fors1k-WinApi -UseBasic))))}}

Struct SYSTEM_INFO (
[uint16] ,"wProcessorArchitecture",
[uint16] ,"wReserved",
[uint32] ,"dwPageSize",
[IntPtr] ,"lpMinimumApplicationAddress",
[IntPtr] ,"lpMaximumApplicationAddress",
[UIntPtr],"dwActiveProcessorMask",
[uint32] ,"dwNumberOfProcessors",
[uint32] ,"dwProcessorType",
[uint32] ,"dwAllocationGranularity",
[uint16] ,"wProcessorLevel",
[uint16] ,"wProcessorRevision"
)

$sysInfo = [SYSTEM_INFO]::new()

WinApi -re Void -dll Kernel32 GetNativeSystemInfo([ref]$sysInfo)

$sysInfo.wProcessorArchitecture

alpap
11-02-2021, 21:33
тоже 0 покажет? »
нет, тут - 9

Fors1k
11-02-2021, 21:50
Отлично, 9 - это х64! :nunchaku:

Ядро твоей системы владеет верной информацией)

greg zakharov
15-02-2021, 19:39
Ядро твоей системы владеет верной информациейТехнически ядро ничем не владеет, оно являет собой костяк формирующий рабочее окружение системы.

Если так уж чешется, код на С излечит рак яичек решит проблему.
#include <stdio.h>

int main(void) {
unsigned long bitness = 0;
__asm {
xor eax, eax
mov ax, cs
shr eax, 5
mov bitness, eax
};
printf("Bitness: %d-bit\n", 0 < bitness ? 64 : 32);

return 0;
}

Wu-Tang
05-05-2021, 14:34
приветствую.
перечитал эту тему, а также - http://forum.oszone.net/thread-141160-7.html
брал разные скрипты, предложенные gora, а также другими, но что-то не выходит, то срабатывает там, а там нет, то наоборот.

в общем мне надо добавить ключи в реестр.
если win7 x86:
[HKEY_CLASSES_ROOT\*\shell\notepad]
@="Открыть в Блокноте"
"icon"="C:\\Program Files\\Notepad++\\notepad++.exe,0"

[HKEY_CLASSES_ROOT\*\shell\notepad\command]
@="\"C:\\Program Files\\Notepad++\\notepad++.exe\" \"%1\""
если win7 x64:
[HKEY_CLASSES_ROOT\*\shell\notepad]
@="Открыть в Блокноте"
"icon"="C:\\Program Files (x86)\\Notepad++\\notepad++.exe,0"

[HKEY_CLASSES_ROOT\*\shell\notepad\command]
@="\"C:\\Program Files (x86)\\Notepad++\\notepad++.exe\" \"%1\""
что не делал, не выходит, прошу помочь.

Elven
05-05-2021, 16:40
И охота же некропостерствовать...
Начнем с начала: поддержка win7 закончилась еще в январе 2020, посему сначала рекомендация: избавляйтесь от них. И чем быстрее тем лучшее.
о срабатывает там, а там нет, то наоборот »
Это как-то не особенно информативно. Лучше подробнее описывать что именно не срабатывает и что пробовалось.

Далле, судя по тому что нужно, достаточно проверить наличие/значение переменной %ProgramFiles(x86)%. Если есть - суем вариант для x64, нету - x86.
if defined %ProgramFiles(x86)% (
echo reg add x64
) else (
echo reg add x86
)

винды опять нет под рукой, поэтому не проверял как оно проверяет.

И еще, проще и надежнее добавлять ключи через те же групповые политики, это позволит и точнее прицелится в нужную разрядность, и позволит избежать подобных проверок на непонятно зачем.

Wu-Tang
05-05-2021, 17:15
Elven,
Мне нравится 7-ка, я на хп сидел пока стало невыносимо )))
мне батником нужно добавить.


@echo off
if defined %ProgramFiles(x86)% (
echo
reg add "HKCR\*\shell\notepad" /v "" /t REG_SZ /d "ЋвЄалвм ў Ѓ«®Є*®вҐ" /f
reg add "HKCR\*\shell\notepad" /v "icon" /t REG_SZ /d "%ProgramFiles(x86)%\Notepad++\notepad++.exe,0" /f
reg add "HKCR\*\shell\notepad\command" /v "" /t REG_SZ /d "\"%ProgramFiles(x86)%\Notepad++\notepad++.exe\" \"%%1\"" /f
) else (
echo
reg add "HKCR\*\shell\notepad" /v "" /t REG_SZ /d "ЋвЄалвм ў Ѓ«®Є*®вҐ" /f
reg add "HKCR\*\shell\notepad" /v "icon" /t REG_SZ /d "%ProgramFiles%\Notepad++\notepad++.exe,0" /f
reg add "HKCR\*\shell\notepad\command" /v "" /t REG_SZ /d "\"%ProgramFiles%\Notepad++\notepad++.exe\" \"%%1\"" /f
)

на х64 оси записало путь ProgramFiles вместо ProgramFiles(х86).

Elven
05-05-2021, 17:53
Нужно смотреть, что в переменных. Емнип в win7 была какая-то муть относительно того, какой процесс запущен (т.е. в зависимости от разрядности процесса переменная может поменять значение), т.о. из батника нужно вывести значение переменных ProgramFiles, ProgramFiles(x86), ProgramW6432 и посмотреть какая из них что возвращает. Что-то мне кажется, что для запуска из cmd ProgramFiles вернет значение "C:\Program Files (x86)", но это не точно.
Собственно, совать в reg add переменные я и не требовал, вполне бы нормально сработали и изначально указанные пути.

Iska
05-05-2021, 18:26
Емнип в win7 была какая-то муть относительно того, какой процесс запущен »
Так всегда было. Так и осталось.

Что-то мне кажется, что для запуска из cmd ProgramFiles вернет значение "C:\Program Files (x86)", но это не точно. »
Только если запущен x86 cmd.exe.

https://i.imgur.com/eBLPR2Z.png

Wu-Tang, тут ещё зависит, какой разрядности запускается сам reg.exe — на него ведь точно так же действуют перенаправления файловой системы и реестра.

Wu-Tang
06-05-2021, 07:37
Elven,
так какой есть выход?
Iska,
я так понимаю в 32битной запускается 32битный, а вот в 64битной хз, либо тот, либо другой.
есть какое-н решение в этой задаче?
сейчас у меня есть специально две виртуалки х86 и х64, тестирую параллельно внося правки, но либо там не отрабатывает, либо там.

Iska
06-05-2021, 08:03
есть какое-н решение в этой задаче? »
Есть. Оно изложено в этой теме.

но либо там не отрабатывает, либо там. »
Не может не отрабатывать. Значит, Вы что-то не так делаете. Опишите подробно, как именно Вы делаете.

Wu-Tang
06-05-2021, 09:10
Iska,
ну как ни так, я привел скрипт, который запускаю, сказали все правильно.
x86 - https://dropmefiles.com/1bUOi
x64 - https://dropmefiles.com/fM9ES
в х86 обрезает путь после добавления в реестр.

Elven
06-05-2021, 13:38
Два варианта:
1. вбить пути без переменных (рили, они здесь нужны как собаке пятый хвост);
2. добавить вывод переменных %ProgramFiles(x86)% и %ProgramFiles% с паузой в конец скрипта, меня терзают смутные сомнения, что под x86 она либо пустая либо еще что-то с ней не так.

echo "ProgramFiles(x86): %ProgramFiles(x86)%"
echo "ProgramFiles: %ProgramFiles%"
pause

Или без паузы, но выводить в файл

echo "ProgramFiles(x86): %ProgramFiles(x86)%" > vars.txt
echo "ProgramFiles: %ProgramFiles%" >> vars.txt

Или вывод доступных переменных (вот как Iska писал, например)
set program

Есть еще некоторый шанс на то, что в переменной указанной в срипте каким-то боком попал лишний символ или символ внешне похожий на нужный, соответственно пытается подставиться не %ProgramFiles%, а, например, %ProgramFiIes%, которая, естественно, не объявлена.

Wu-Tang
06-05-2021, 15:43
echo "ProgramFiles(x86): %ProgramFiles(x86)%" > vars.txt
echo "ProgramFiles: %ProgramFiles%" >> vars.txt »
вывело:

"ProgramFiles(x86): "
"ProgramFiles: C:\Program Files"

set program »

Microsoft Windows [Version 6.1.7601]
(c) Корпорация Майкрософт (Microsoft Corp.), 2009. Все права защищены.

C:\Windows\system32>set program
ProgramData=C:\ProgramData
ProgramFiles=C:\Program Files

C:\Windows\system32>

Elven
06-05-2021, 16:57
Добрался до возможности посмотреть что там было по ссылкам нормально. Wu-Tang, вы указываете в посте один код, а запускаете другой. Причем это на момент записи видео, как я понимаю, а теперь там вообще какой-то третий если не пятый может быть.
Если используется код который был на видео - убрать оттуда к лешему set он там не используется, только захламляет код. В двух местах убрать!
set xos=x64
и
set xos=x86
к сожалению cmd под рукой так и нету, посему проверить не получится, но кмк reg add в первых скобках не выполнялся никогда, в то время как во вторых (в тех которые после else) наоборот - каждый раз, в не зависимости от разрядности системы.




© OSzone.net 2001-2012