W dniu 2017-10-12 o 18:34, JoteR pisze:
"Stregor" napisał:
Potrzebuję z wnętrza skryptu sprawdzić, z jaką wersją Windows
(obojętnie -
7, 8, czy 10) mam do czynienia - 32 czy 64-bitową. [...]
Niedawno miałem identyczny problem. W moim przypadku wystarczyło
sprawdzenie obecności katalogu C:\Program Files (x86)
Trudno to jednak nazwać mniej ordynarną metodą. Co do skuteczności to
chyba jeszcze nie widziałęm 64 bitowej instalacji bez tego katalogu.
https://support.microsoft.com/en-us/help/556009
Dotyczy strszych wersji Windows ;->
Nie doczytałem, mea culpa...
Sprawdziłem dzisiaj wartości w tym kluczu na kilku maszynach z
procesorami 64-bitowymi:
Windows 7 32-bit:
Identifier REG_SZ x86 Family x Model y Stepping z
PlatformID REG_DWORD 0x00000010(16)
Windows 7 64-bit:
Identifier REG_SZ Intel64 Family x Model y Stepping z
PlatformID REG_DWORD 0x00000002(2)
Tu jest O.K., wygląda na to, że wystarczy sprawdzić wartość PlatformID.
Ale w Windows 10 już nie ma PlatformID:
Windows 10 32-bit:
Identifier REG_SZ x86 Family x Model y Stepping z
PlatformSpecificField1 REG_DWORD 0x00000002(2)
Windows 10 64-bit:
Identifier REG_SZ Intel64 Family x Model y Stepping z
PlatformSpecificField1 REG_DWORD 0x00000002(2)
PlatformSpecificField2 REG_BINARY 00 00 00 00
Mam nadzieję, że wystarczy sprawdzić początek wartości Identifier.
Swoją drogą - wyciąganie wersji systemu z klucza, w nazwie którego są
"HARDWARE" i "Processor" w dodatku z wartości określającej model
procesora, to jakiś wyższy stopień abstrakcji ;->
Poczytałem źródełka opensourcowego instalatora InnoSetup, żeby zobaczyć
jak on to robi. I, tak w skrócie, nie ma letko ;)
Tutaj masz procedurę sprawdzającą, czy system jest 64-bitowy, oraz, przy
okazji architekturę procesora. Przeczytaj zwłaszcza komentarz :)
https://pastebin.com/L0bw9XpZ
Jeśli chcesz, to mogę Ci ten kawałek kodu skompilować w Delphi i zaszyć
do konsolowej apki zwracającej tekstowo "1" lub "0" czy co tam wolisz -
napisz na priv.
--
Pozdrawiam,
Stregor
|