Как показать всплывающее сообщение, когда пользователь пытается установить в неподдерживаемой операционной системе - PullRequest
0 голосов
/ 17 марта 2019

При установке программного обеспечения я хотел определить операционную систему, и если это «Windows 10 Pro» или «Windows Server 2012», должно появиться окно с сообщением, и установка должна быть остановлена.

Я использую приведенный ниже фрагмент кода. Но здесь, даже если операционная система "Windows 10 Pro", окно сообщения не появляется.

ReadRegStr $R0 HKLM "SOFTWARE\Microsoft\Windows NT\CurrentVersion" "ProductName"

${If} $R0 == "Windows 10 Pro"

MessageBox MB_OK|MB_ICONQUESTION "This operating system is not supported." IDOK
 Quit
${EndIf}

Это правильный путь или мы можем определить операционную систему и показать окно сообщения?

1 Ответ

0 голосов
/ 17 марта 2019

Я не совсем понимаю, зачем вам нужны эти ограничения, но здесь вы идете:

!include WinVer.nsh

!define /IfNDef PRODUCT_PROFESSIONAL      0x00000030
!define /IfNDef PRODUCT_PROFESSIONAL_N    0x00000031
!define /IfNDef PRODUCT_PRO_WORKSTATION   0x000000A1
!define /IfNDef PRODUCT_PRO_WORKSTATION_N 0x000000A2
!define /IfNDef ERROR_INSTALL_REJECTED 1654

Function .onInit
System::Call 'KERNEL32::GetProductInfo(i6,i1,i0,i0,*i0r1)'
${WinVerGetBuild} $2

${If} ${IsServerOS} ; Windows Server?
${AndIf} $2 U>= 9200 ; Server 2012?
${AndIf} $2 U<  9600 ; and not Server 2012 R2?
    Goto die_unsupported_os
${EndIf}

${If} $2 U>= 9800 ; Windows 10?
${AndIfNot} ${IsServerOS} ; Not Windows Server?
    ${If} $1 = ${PRODUCT_PROFESSIONAL}
    ${OrIf} $1 = ${PRODUCT_PROFESSIONAL_N}
    ${OrIf} $1 = ${PRODUCT_PRO_WORKSTATION}
    ${OrIf} $1 = ${PRODUCT_PRO_WORKSTATION_N}
        die_unsupported_os:
        MessageBox mb_IconStop|mb_OK "Not allowed to run on this version of Windows for some reason!" /SD IDOK
        SetErrorLevel ${ERROR_INSTALL_REJECTED}
        Quit
    ${EndIf}
${EndIf}
FunctionEnd

Примечание. Сборки Windows Insider также идентифицируются как Pro, поэтому в итоге вы их также заблокируете.

...