Показать полную графическую версию : [решено] Определение версии ОС
Нужен скрипт VBS: если ОС - Windows 7 или Vista - выполняется одно действие, в противном случае - другое действие.
BigBoo, есть такой вариант CMD/BAT - [решено] Определение версии (сборки) и сервис пака ОС (http://forum.oszone.net/thread-141160.html)
Принцип думаю будет понятен что и где смотреть.
DmitriiV
24-10-2012, 16:33
Вариант для текущего компьютера средствами WMI:
Set objCollection = GetObject("winmgmts:\\.\root\cimv2").ExecQuery("SELECT Name FROM Win32_OperatingSystem")
For Each objItem In objCollection
strOS = objItem.Name
Next
If InStr(1, strOS, " Vista ", vbTextCompare) > 0 Or InStr(strOS, " 7 ") > 0 Then
WScript.Echo "Выполняем действие для Vista/7."
Else
WScript.Echo "Выполняем действие для прочих версий."
End If
Возможны и другие варианты, но здесь надо знать больше подробностей об условиях, в которых решается задача (и, может быть, о цели её решения).
'Вариации версий Windows которые я точно проверил:
'Microsoft Windows Server 2008 R2 Standard
'Виндовс 7 x86/x64
'Microsoft Windows 7 Пpoфeccиoнaльнaя
'Виндовс 8.1
'Майкрософт Windows 8.1 для одного языка с Bing
'Майкрософт Windows 8.1 для одного языка
'Виндовс XP
'Microsoft Windows XP Professional
'Microsoft Windows XP Home Edition
'Виндовс 10
'Майкрософт Windows 10 Pro
greg zakharov
29-09-2016, 17:03
Возможны и другие варианты, но здесь надо знать больше подробностей об условияхВариантов, как и условий - много. Особенно доставляет WMI: были прецеденты, когда Win32_OperatingSystem содержал не совсем верную информацию о системе, например, в одной из контор, где была развернута Win7, система определялась как 2008 R2. А ведь такого же эффекта можно добиться незамысловатым С-кодом:
#include <windows.h>
#include <stdio.h>
#include <locale.h>
#define CreateString(String) #String,
#define FifthBranch(Type) Type(2000) Type(XP) Type(Server 2003)
#define SixthBranch(Type) Type(Vista\\Server 2008) \
Type(7\\Server 2008 R2) \
Type(8\\Server 2012) \
Type(8.1\\Server 2012 R2)
VOID (__stdcall *RtlGetNtVersionNumbers)(
LPDWORD Major,
LPDWORD Minor,
LPDWORD Build
);
BOOL Is64BitSystem() {
#if defined(_WIN64)
return TRUE;
#elif defined(_WIN32)
BOOL x64 = FALSE;
return IsWow64Process(GetCurrentProcess(), &x64) && x64;
#else
return FALSE;
#endif
}
int main(void) {
DWORD _maj = 0, _min = 0;
const char *Fifth[] = {FifthBranch(CreateString)};
const char *Sixth[] = {SixthBranch(CreateString)};
setlocale(LC_CTYPE, "");
if (!(RtlGetNtVersionNumbers = (PVOID)GetProcAddress(
GetModuleHandle("ntdll.dll"), "RtlGetNtVersionNumbers"
))) {
LPVOID msg;
FormatMessage(
FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_SYSTEM,
NULL, GetLastError(), MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT),
(LPTSTR) &msg, 0, NULL
);
printf("%s\n", msg);
LocalFree(msg);
return -1;
}
printf("%s, Windows ", Is64BitSystem() ? "64-bit" : "32-bit");
RtlGetNtVersionNumbers(&_maj, &_min, NULL);
switch (_maj) {
case 5: printf(Fifth[_min]); break;
case 6: printf(Sixth[_min]); break;
case 10: printf("10\n"); break;
default: printf("Unknown"); break;
}
return 0;
}
Такие коврижки.
© OSzone.net 2001-2012
vBulletin v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.