Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  

Показать сообщение отдельно
MKN MKN вне форума

Ветеран


Сообщения: 2355
Благодарности: 557

Профиль | Отправить PM | Цитировать


Т.е. - при запуске exe-скрипта с флешки из под Win10 и с помощью чисто GetVersionEx, и с помощью WinVer2.nsh - ошибочная версия ОС. (при запуске с флешки из под W7 и W8 - всё ОК)
При запуске с флешки из под Win10 с помощью WMI.nsh ( т.е. с использованием WMIC) - всё определяется правильно :

Код: Выделить весь код
;http://nsis.sourceforge.net/WMI_header
OutFile "OperatingSystemInfo.exe"
!include MUI2.nsh
!include WMI.nsh
!include LogicLib.nsh
!insertmacro MUI_LANGUAGE "English"

Var WMI_Caption
Var WMI_Version
Var WMI_CSDVersion
Var WMI_ServicePackMajorVersion
Var WMI_ServicePackMinorVersion
Var WMI_PushVar

Section 
; короткое описание версии операционной системы
${WMIGetInfo} root\CIMV2 Win32_OperatingSystem Caption callback_Function
 StrCpy $WMI_Caption $WMI_PushVar

 ; версия ОС
${WMIGetInfo} root\CIMV2 Win32_OperatingSystem Version callback_Function
 StrCpy $WMI_Version $WMI_PushVar

; последний установленный сервис-пак (строка); если никакой сервис-пак не установлен, пустая строка.
${WMIGetInfo} root\CIMV2 Win32_OperatingSystem CSDVersion callback_Function
 StrCpy $WMI_CSDVersion $WMI_PushVar

; версия сервис-пака
${WMIGetInfo} root\CIMV2 Win32_OperatingSystem ServicePackMajorVersion callback_Function
 StrCpy $WMI_ServicePackMajorVersion $WMI_PushVar

; подверсия сервис-пака
${WMIGetInfo} root\CIMV2 Win32_OperatingSystem ServicePackMinorVersion callback_Function
 StrCpy $WMI_ServicePackMinorVersion $WMI_PushVar
SectionEnd
 
Function callback_Function
System::Call "user32::OemToChar(t R2, t. r2)"
detailprint "$2"
StrCpy $WMI_PushVar $2 
FunctionEnd
А такой код (ранее предложенный kotkovets), в Win10 - c HDD работате нормально, с флешки в Win10 - вообще не работает
Код: Выделить весь код
OutFile "WMI_OperatingSystem.exe" 
!include "LogicLib.nsh" 

!macro IWbemClassObject->Get NameObject OUT
    System::Call "*(i,i,i)i.R4"
    System::Call "$R3->4(w'${NameObject}',i0,iR4,i0,i0)"
    System::Call "*$R4(i.R6,i,i.R5)"
    StrCmp $R6 3 0 +2
    IntFmt $R5 %u $R5
    StrCmp $R6 8 0 +2
    !ifdef NSIS_UNICODE
      IntFmt $R5 %s $R5
    !else
      IntFmt $R5 %S $R5
    !endif
    System::Call "ole32::VariantClear(iR4)"
    System::Free $R4
    StrCpy ${OUT} $R5
!macroend

Section
   System::Call "ole32::CoInitializeEx(i0,i2)"
   System::Call "ole32::CoCreateInstance(g'{4590f811-1d3a-11d0-891f-00aa004b2e24}',i0,i1,g'{dc12a687-737f-11cf-884d-00aa004b2e24}',*i.R0)i.R7"
   ${If} $R7 == 0
      System::Call "ole32::CoInitializeSecurity(i0,i-1,i0,i0,i2,i3,i0,i0,i0)"
      System::Call "$R0->3(w'root\CIMV2',i0,i0,i0,i0,i0,i0,*i.R1)i.R7"
      ${If} $R7 == 0
         System::Call "$R1->20(w'WQL', w'SELECT * FROM Win32_OperatingSystem',i48,i0,*i.R2)i.R7"
         System::Call "$R2->4(i0xffffffff,i1,*i.R3,*i)i.R7"
         ${If} $R7 == 0
              
			    !insertmacro IWbemClassObject->Get "Caption" $7
                      MessageBox MB_OK "Caption=$7"
				!insertmacro IWbemClassObject->Get "Version" $7
				     MessageBox MB_OK "Version=$7"
							 
               System::Call "$R0->2()"
               System::Call "$R1->2()"
               System::Call "$R2->2()"
               System::Call "$R3->2()"
         ${Else}
            System::Call "$R0->2()"
            System::Call "$R1->2()"
            System::Call "$R2->2()"
         ${EndIf}
      ${Else}
        System::Call "$R0->2()"
        System::Call "$R1->2()"
      ${EndIf}
  ${EndIf}
SectionEnd
Может Вячеслав скажет в чём тут дело ? (и подправит код...)

PS StdUtils плаг - также правильно определяет параметры Win10, и с флешки и с HDD. (кстати, он обновился Version 1.08, released 2015-10-10 )

Последний раз редактировалось MKN, 22-10-2015 в 16:34.


Отправлено: 15:56, 22-10-2015 | #1863