Skip to content
This repository was archived by the owner on Jan 28, 2023. It is now read-only.

Improve HAXM installer #474

Merged
merged 3 commits into from
Oct 19, 2022
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
114 changes: 83 additions & 31 deletions Installer/HaxmSetup.nsi
Original file line number Diff line number Diff line change
Expand Up @@ -58,17 +58,39 @@ Section Main
File "assets\checktool.exe"
${Log} "Extract: checktool.exe... 100%"

Check:
Call CheckEnv
Pop $0

${Switch} $0
${Case} 1
MessageBox MB_OK|MB_ICONEXCLAMATION "${DLG_WARNING}" /SD IDOK
${Log} "${DLG_WARNING}"
${Break}
${Case} 2
MessageBox MB_RETRYCANCEL|MB_ICONSTOP "${DLG_GUEST_ERROR}" /SD IDCANCEL \
IDRETRY Check
${Log} "${DLG_GUEST_ERROR}"
${Exit} 0 3
${Break}
${Case} 3
MessageBox MB_OK|MB_ICONSTOP "${DLG_SYS_ERROR}" /SD IDOK
${Log} "${DLG_SYS_ERROR}"
Call Restore
${Exit} 0 3
${Break}
${Default}
${Break}
${EndSwitch}

Call UninstallMsiVersion
Call InstallDriver

; WriteUninstaller is not used directly because a signed binary is needed
File "assets\uninstall.exe"
${Log} "Create uninstaller: $INSTDIR\uninstall.exe"
SectionEnd

Section -Post
Call onInstalled
Call LoadDriver
SectionEnd

Function .onInit
Expand All @@ -93,33 +115,41 @@ Function CheckVersion

ClearErrors
EnumRegKey $0 ${REG_ROOT_KEY} ${REG_KEY_PRODUCT} 0
IfErrors not_installed installed
not_installed:
StrCpy $code 0
${Log} "Version: ${PRODUCT_VERSION}"
Return
installed:
ReadRegStr $0 ${REG_ROOT_KEY} ${REG_KEY_PRODUCT} "DisplayVersion"
${VersionCompare} $0 ${PRODUCT_VERSION} $R0
${Switch} $R0
${Case} 0
MessageBox MB_YESNO|MB_ICONQUESTION "${DLG_REINSTALL}" /SD IDYES IDYES \
reinstall
${Exit} 1 0
reinstall:
StrCpy $code 1
${Log} "${LOG_REINSTALL}: $0"
${Break}
${Case} 1
MessageBox MB_OK|MB_ICONEXCLAMATION "${DLG_DOWNGRADE}" /SD IDOK
${Log} "${LOG_UNINSTALL}: $0"
${Exit} 1 3
${Break}
${Default}
StrCpy $code 2
${Log} "${LOG_UPGRADE}: $0 => ${PRODUCT_VERSION}"
${Break}
${EndSwitch}
IfErrors NotInstalled Installed
NotInstalled:
StrCpy $code 0
${Log} "Version: ${PRODUCT_VERSION}"
Return
Installed:
ReadRegStr $0 ${REG_ROOT_KEY} ${REG_KEY_PRODUCT} "DisplayVersion"
${VersionCompare} $0 ${PRODUCT_VERSION} $R0
${Switch} $R0
${Case} 0
MessageBox MB_YESNO|MB_ICONQUESTION "${DLG_REINSTALL}" /SD IDYES IDYES \
Reinstall
${Exit} 1 0
Reinstall:
StrCpy $code 1
${Log} "${LOG_REINSTALL}: $0"
${Break}
${Case} 1
MessageBox MB_OK|MB_ICONEXCLAMATION "${DLG_DOWNGRADE}" /SD IDOK
${Log} "${LOG_UNINSTALL}: $0"
${Exit} 1 3
${Break}
${Default}
StrCpy $code 2
${Log} "${LOG_UPGRADE}: $0 => ${PRODUCT_VERSION}"
${Break}
${EndSwitch}
FunctionEnd

Function Restore
Delete "${DRIVER_DIR}\checktool.exe"
${Log} "Delete file: ${DRIVER_DIR}\checktool.exe"

RMDir /r "$INSTDIR"
${Log} "Delete folder: $INSTDIR"
FunctionEnd

Function UninstallMsiVersion
Expand Down Expand Up @@ -174,7 +204,7 @@ Function InstallDriver
${Log} "Copy to ${DRIVER_DIR}\${DRIVER_FILE}"
FunctionEnd

Function onInstalled
Function LoadDriver
${If} $code == 0
Call CreateService
${EndIf}
Expand All @@ -185,6 +215,28 @@ Function onInstalled
${Exit} 0 $code
FunctionEnd

Function onFinished
IntOp $0 $status & ${ENV_FLAGS_SYS_SUPPORTED}
${If} $0 != 0
Call LoadSystemErrorPage
Return
${EndIf}

IntOp $0 $status & ${ENV_FLAGS_GUEST_READY}
${If} $0 != 0
Call LoadGuestErrorPage
Return
${EndIf}

IntOp $0 $status & ${ENV_FLAGS_HOST_READY}
${If} $0 != 0
Call LoadHostErrorPage
Return
${EndIf}

Call LoadSuccessPage
FunctionEnd

Function onAbort
${Exit} 0 0
FunctionEnd
2 changes: 1 addition & 1 deletion Installer/RegOps.nsh
Original file line number Diff line number Diff line change
Expand Up @@ -36,7 +36,7 @@
!endif

!include 'Log.nsh'
!include 'Strings.nsh'
!include 'Resources.nsh'

!ifdef INSTALL

Expand Down
136 changes: 136 additions & 0 deletions Installer/Resources.nsh
Original file line number Diff line number Diff line change
@@ -0,0 +1,136 @@
/*
* Copyright (c) 2020 Intel Corporation
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions are met:
*
* 1. Redistributions of source code must retain the above copyright notice,
* this list of conditions and the following disclaimer.
*
* 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
*
* 3. Neither the name of the copyright holder nor the names of its
* contributors may be used to endorse or promote products derived from
* this software without specific prior written permission.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
* ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
* LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
* SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
* INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
* CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
* POSSIBILITY OF SUCH DAMAGE.
*/

!ifndef RESOURCES_NSH_
!define RESOURCES_NSH_

# Strings
!define PRODUCT_NAME "HAXM"
!define PRODUCT_FULL_NAME "Hardware Accelerated Execution Manager"
!define PRODUCT_VERSION "7.8.0"
!define PRODUCT_YEAR "2020"
!define PRODUCT_PUBLISHER "Intel Corporation"
!define PRODUCT_BRAND "Intel${U+00AE}"
!define PRODUCT_WEBSITE "https://github.com/intel/haxm"
!define PRODUCT_WIKIPAGE "/wiki/Windows-System-Configurations"
!define PRODUCT_GUID "AAA802A8DF574F4CA0489512D2D91818"

!define PROGRAM_DIR "\Intel\${PRODUCT_NAME}"

!define SERVICE_NAME "IntelHaxm"
!define SERVICE_DISPLAY_NAME "Intel(R) ${PRODUCT_FULL_NAME} Service"

!define REG_ROOT_KEY "HKLM"
!define REG_KEY_CURRENT_VERSION "SOFTWARE\Microsoft\Windows\CurrentVersion"
!define REG_KEY_USER_DATA "${REG_KEY_CURRENT_VERSION}\Installer\UserData\
\S-1-5-18\Products\${PRODUCT_GUID}"
!define REG_KEY_INSTALL "${REG_KEY_USER_DATA}\InstallProperties"
!define REG_KEY_UNINSTALL "${REG_KEY_CURRENT_VERSION}\Uninstall"
!define REG_KEY_PRODUCT "${REG_KEY_UNINSTALL}\${PRODUCT_NAME}"

!define DRIVER_DIR "$SYSDIR\drivers"
!define DRIVER_FILE "${SERVICE_NAME}.sys"
!define DRIVER_WIN10_64 "assets\win10\x64\${DRIVER_FILE}"
!define DRIVER_WIN10_32 "assets\win10\x86\${DRIVER_FILE}"
!define DRIVER_WIN7_64 "assets\win7\x64\${DRIVER_FILE}"
!define DRIVER_WIN7_32 "assets\win7\x86\${DRIVER_FILE}"

!define DLG_SYS_ERROR "The system requirements are not satisfied."
!define DLG_GUEST_ERROR "${PRODUCT_NAME} is being used by running virtual \
machines now."
!define DLG_WARNING "The ${PRODUCT_NAME} driver can be installed on this \
computer. However, it is required to further configure the system to \
make it usable. Then ${PRODUCT_NAME} will be automatically loaded for \
use."
!define DLG_DOWNGRADE "The existing version is greater than the version to \
be installed. Please uninstall the existing version manually before \
proceeding."
!define DLG_REINSTALL "${PRODUCT_NAME} v${PRODUCT_VERSION} has already been \
installed. Are you sure to continue?"
!define DLG_UNINSTALL "Are you sure you want to remove $(^Name)?"
!define LOG_REINSTALL "To reinstall the current version"
!define LOG_UNINSTALL "To uninstall the current version"
!define LOG_UPGRADE "To upgrade version"

!define PG_COMPLETE_TITLE "Completed $(^Name) Setup"
!define PG_FAIL_TITLE "Failed to Install $(^Name)"
!define PG_COMPLETE_TEXT "$(^Name) has been installed on your computer."
!define PG_SYS_FAIL_TEXT "The following ${PRODUCT_NAME} installation \
requirements are not supported by this system:"
!define PG_HOST_FAIL_TEXT "Attention: Only when the following system \
configurations are completed can ${PRODUCT_NAME} run properly."
!define PG_GUEST_FAIL_TEXT "There are still virtual machines running on \
${PRODUCT_NAME}. Please terminate these virtual machine processes \
first."
!define PG_CPU_SUPPORT "Intel Processor (CPU)"
!define PG_VMX_SUPPORT "Intel Virtualization Technology (VT-x)"
!define PG_NX_SUPPORT "Execute Disable Bit (XD)"
!define PG_EM64T_SUPPORT "Intel Extended Memory 64 Technology (EM64T)"
!define PG_EPT_SUPPORT "Intel VT-x with Extended Page Tables (EPT)"
!define PG_ENABLE_VMX "BIOS/UEFI: Enable Intel Virtualization Technology"
!define PG_ENABLE_NX "BIOS/UEFI: Enable Execute Disable Bit"
!define PG_OSVER_SUPPORT "Windows 7 or higher"
!define PG_OSARCH_SUPPORT "32-bit or 64-bit version of Windows"
!define PG_DISABLE_HYPERV "Windows: Disable Microsoft Hyper-V"
!define PG_HOMEPAGE "${PRODUCT_NAME} Homepage: ${PRODUCT_WEBSITE}"
!define PG_WIKIPAGE "View ${PRODUCT_NAME} wiki page to configure the \
system"

# Constants
!define ENV_FLAG_CPU_SUPPORTED 0x00000001
!define ENV_FLAG_VMX_SUPPORTED 0x00000002
!define ENV_FLAG_NX_SUPPORTED 0x00000004
!define ENV_FLAG_EM64T_SUPPORTED 0x00000008
!define ENV_FLAG_EPT_SUPPORTED 0x00000010
!define ENV_FLAG_VMX_ENABLED 0x00000100
!define ENV_FLAG_NX_ENABLED 0x00000200
!define ENV_FLAG_EM64T_ENABLED 0x00000400
!define ENV_FLAG_OSVER_SUPPORTED 0x00010000
!define ENV_FLAG_OSARCH_SUPPORTED 0x00020000
!define ENV_FLAG_HYPERV_DISABLED 0x00040000
!define ENV_FLAG_SANDBOX_DISABLED 0x00080000
!define ENV_FLAG_GUEST_UNOCCUPIED 0x01000000

# Hardware supports:
# ENV_FLAG_CPU_SUPPORTED, ENV_FLAG_VMX_SUPPORTED, ENV_FLAG_NX_SUPPORTED,
# ENV_FLAG_EM64T_SUPPORTED, ENV_FLAG_EPT_SUPPORTED
# OS supports:
# ENV_FLAG_OSVER_SUPPORTED, ENV_FLAG_OSARCH_SUPPORTED
!define ENV_FLAGS_SYS_SUPPORTED 0x000300ff
# BIOS settings:
# ENV_FLAG_VMX_ENABLED, ENV_FLAG_NX_ENABLED, ENV_FLAG_EM64T_ENABLED
# OS settings:
# ENV_FLAG_HYPERV_DISABLED, ENV_FLAG_SANDBOX_DISABLED
!define ENV_FLAGS_HOST_READY 0x00fcff00
# Guest status:
# ENV_FLAG_GUEST_UNOCCUPIED
!define ENV_FLAGS_GUEST_READY 0xff000000

!endif # RESOURCES_NSH_
74 changes: 0 additions & 74 deletions Installer/Strings.nsh

This file was deleted.

Loading