Skip to content

Instantly share code, notes, and snippets.

Created April 12, 2012 16:46
Show Gist options
  • Star 1 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save anonymous/2369011 to your computer and use it in GitHub Desktop.
Save anonymous/2369011 to your computer and use it in GitHub Desktop.
Example code for creating multiple installer types
<?xml version="1.0" encoding="UTF-8"?>
<Wix xmlns="http://schemas.microsoft.com/wix/2006/wi">
<Product Id="*" Name="GradeCam Plugin" Language="1033" Version="${FBSTRING_PLUGIN_VERSION}" Manufacturer="${FBSTRING_CompanyName}" UpgradeCode="b0000000-4cf5-51d8-9699-b470daed7c1e">
<Package InstallerVersion="200" Compressed="yes" Description="Installer for the GradeCam Plugin" InstallScope="perUser" />
<Upgrade Id="b0000000-4cf5-51d8-9699-b470daed7c1e">
<UpgradeVersion
Property="OLD_VERSION_FOUND"
Minimum="0.0.1" IncludeMinimum="yes"
Maximum="${FBSTRING_PLUGIN_VERSION}" IncludeMaximum="yes"
OnlyDetect="no" IgnoreRemoveFailure="yes"
MigrateFeatures="yes" />
</Upgrade>
<InstallExecuteSequence>
<RemoveExistingProducts After="InstallInitialize" />
<InstallExecute After="RemoveExistingProducts" />
</InstallExecuteSequence>
<Media Id="1" Cabinet="${PLUGIN_NAME}.cab" EmbedCab="yes" />
<Directory Id="TARGETDIR" Name="SourceDir">
<Directory Id="${FB_WIX_INSTALL_LOCATION}">
<Directory Id="CompanyDir" Name="${COMPANY_NAME}">
<Component Id="CompanyDirComp" Guid="*">
<RemoveFolder Id="RemoveCompanyDir" On="uninstall" />
<RegistryValue Root="HKCU" Key="SOFTWARE\${COMPANY_NAME}" Name="Uninstall" Type="string" Value="${FBSTRING_PLUGIN_VERSION}" KeyPath="yes" />
</Component>
<Directory Id="INSTALLDIR" Name="${PLUGIN_NAME}">
<Component Id="InstallDirComp" Guid="*">
<RemoveFolder Id="RemoveInstallDir" On="uninstall" />
<RegistryValue Root="HKCU" Key="SOFTWARE\${COMPANY_NAME}\${PLUGIN_NAME}" Name="Uninstall" Type="string" Value="${FBSTRING_PLUGIN_VERSION}" KeyPath="yes" />
</Component>
<!-- Put Additional files here: -->
<!-- example:
<Component Id="UniqueComponentId" Guid="*">
<File Id="uniqueFileId" KeyPath="yes" Source="SourceDir\filename.ext" />
</Component>
/example -->
<!-- -->
</Directory>
</Directory>
</Directory>
</Directory>
<Feature Id="MainPluginFeature" Title="${FBSTRING_ProductName}" Level="1">
<ComponentRef Id="InstallDirComp"/>
<ComponentRef Id="CompanyDirComp"/>
<ComponentGroupRef Id="PluginDLLGroup"/>
</Feature>
</Product>
</Wix>
<?xml version="1.0" encoding="UTF-8"?>
<Wix xmlns="http://schemas.microsoft.com/wix/2006/wi">
<Product Id="*" Name="GradeCam Plugin" Language="1033" Version="${FBSTRING_PLUGIN_VERSION}" Manufacturer="${FBSTRING_CompanyName}" UpgradeCode="b0000000-4cf5-51d8-9699-b470daed7c1e">
<Package InstallerVersion="200" Compressed="yes" Description="Installer for the GradeCam Plugin" InstallScope="perMachine" />
<Upgrade Id="b0000000-4cf5-51d8-9699-b470daed7c1e">
<UpgradeVersion
Property="OLD_VERSION_FOUND"
Minimum="0.0.1" IncludeMinimum="yes"
Maximum="${FBSTRING_PLUGIN_VERSION}" IncludeMaximum="yes"
OnlyDetect="no" IgnoreRemoveFailure="yes"
MigrateFeatures="yes" />
</Upgrade>
<InstallExecuteSequence>
<RemoveExistingProducts After="InstallInitialize" />
<InstallExecute After="RemoveExistingProducts" />
</InstallExecuteSequence>
<Media Id="1" Cabinet="${PLUGIN_NAME}.cab" EmbedCab="yes" />
<Directory Id="TARGETDIR" Name="SourceDir">
<Directory Id="ProgramFilesFolder">
<Directory Id="CompanyDir" Name="${COMPANY_NAME}">
<Component Id="CompanyDirComp" Guid="*">
<RemoveFolder Id="RemoveCompanyDir" On="uninstall" />
<RegistryValue Root="HKCU" Key="SOFTWARE\${COMPANY_NAME}" Name="Uninstall" Type="string" Value="${FBSTRING_PLUGIN_VERSION}" KeyPath="yes" />
</Component>
<Directory Id="INSTALLDIR" Name="${PLUGIN_NAME}">
<Component Id="InstallDirComp" Guid="*">
<RemoveFolder Id="RemoveInstallDir" On="uninstall" />
<RegistryValue Root="HKCU" Key="SOFTWARE\${COMPANY_NAME}\${PLUGIN_NAME}" Name="Uninstall" Type="string" Value="${FBSTRING_PLUGIN_VERSION}" KeyPath="yes" />
</Component>
<!-- Put Additional files here: -->
<!-- example:
<Component Id="UniqueComponentId" Guid="*">
<File Id="uniqueFileId" KeyPath="yes" Source="SourceDir\filename.ext" />
</Component>
/example -->
<!-- -->
</Directory>
</Directory>
</Directory>
</Directory>
<Feature Id="MainPluginFeature" Title="${FBSTRING_ProductName}" Level="1">
<ComponentRef Id="InstallDirComp"/>
<ComponentRef Id="CompanyDirComp"/>
<ComponentGroupRef Id="PluginDLLGroup"/>
</Feature>
</Product>
</Wix>
; HM NIS Edit Wizard helper defines
!define PRODUCT_NAME "GradeCam Plugin"
!define PRODUCT_VERSION "@FBSTRING_PLUGIN_VERSION@"
!define PRODUCT_PUBLISHER "@FBSTRING_CompanyName@"
!define PRODUCT_WEB_SITE "http://www.gradecam.com"
RequestExecutionLevel @EXECUTION_LEVEL@
SetCompressor lzma
icon "@CMAKE_CURRENT_SOURCE_DIR@\Win\WiX\GCIcon.ico"
; Language Selection Dialog Settings
!define MUI_LANGDLL_REGISTRY_ROOT "@PRODUCT_UNINST_ROOT_KEY@"
!define MUI_LANGDLL_REGISTRY_KEY "@PRODUCT_UNINST_KEY@"
!define MUI_LANGDLL_REGISTRY_VALUENAME "NSIS:Language"
!include 'LogicLib.nsh'
; Welcome page
;!insertmacro MUI_PAGE_WELCOME
; Instfiles page
;!insertmacro MUI_PAGE_INSTFILES
; Finish page
;!insertmacro MUI_PAGE_FINISH
; Language files
;!insertmacro MUI_LANGUAGE "English"
;!insertmacro MUI_LANGUAGE "Spanish"
; Reserve files
;!insertmacro MUI_RESERVEFILE_INSTALLOPTIONS
; MUI end ------
Name "@PRODUCT_NAME@ @PRODUCT_VERSION@"
OutFile "${NSIS_filename}"
InstallDir "@NSIS_INSTALLDIR@\@FBSTRING_CompanyName@"
ShowInstDetails hide
SilentInstall silent
Function .onInit
FunctionEnd
Section "MainSection" SEC01
SetOutPath $INSTDIR
File "@CMAKE_CURRENT_SOURCE_DIR@\Win\WiX\gcsplash.bmp"
File "@CMAKE_CURRENT_SOURCE_DIR@\Win\WiX\gcdone.bmp"
newadvsplash::show 2500 300 200 -1 $INSTDIR\gcsplash.bmp
Pop $1
SetOutPath $INSTDIR\msi
File "${MSI_FILE}"
ExecWait 'msiexec /i "${MSI_FILE}" /liare+ "$INSTDIR\${MSI_FILE}.log"' $0
${If} $0 != 0
MessageBox MB_OK "Error installing plugin. Please see '$INSTDIR\${MSI_FILE}.log' for details"
Abort "Could not install"
${EndIf}
ExecWait 'msiexec /quiet /fa "${MSI_FILE}" /liare+ "$INSTDIR\${MSI_FILE}_repair.log"' $0
${If} $0 != 0
MessageBox MB_OK "Error installing plugin. Please see '$INSTDIR\${MSI_FILE}.log' for details"
Abort "Could not install"
${EndIf}
newadvsplash::stop /WAIT /FADEOUT
newadvsplash::show 200000 500 500 -1 $INSTDIR\gcdone.bmp
Pop $0
SectionEnd
Section -Post
Delete $INSTDIR\gcsplash.bmp
Delete $INSTDIR\gcdone.bmp
SectionEnd
; HM NIS Edit Wizard helper defines
!define PRODUCT_NAME "GradeCam Plugin"
!define PRODUCT_VERSION "@FBSTRING_PLUGIN_VERSION@"
!define PRODUCT_PUBLISHER "@FBSTRING_CompanyName@"
!define PRODUCT_WEB_SITE "http://www.gradecam.com"
RequestExecutionLevel @EXECUTION_LEVEL@
SetCompressor lzma
icon "@CMAKE_CURRENT_SOURCE_DIR@\Win\WiX\GCIcon.ico"
; Language Selection Dialog Settings
!define MUI_LANGDLL_REGISTRY_ROOT "@PRODUCT_UNINST_ROOT_KEY@"
!define MUI_LANGDLL_REGISTRY_KEY "@PRODUCT_UNINST_KEY@"
!define MUI_LANGDLL_REGISTRY_VALUENAME "NSIS:Language"
!include 'LogicLib.nsh'
; Welcome page
;!insertmacro MUI_PAGE_WELCOME
; Instfiles page
;!insertmacro MUI_PAGE_INSTFILES
; Finish page
;!insertmacro MUI_PAGE_FINISH
; Language files
;!insertmacro MUI_LANGUAGE "English"
;!insertmacro MUI_LANGUAGE "Spanish"
; Reserve files
;!insertmacro MUI_RESERVEFILE_INSTALLOPTIONS
; MUI end ------
Name "@PRODUCT_NAME@ @PRODUCT_VERSION@"
OutFile "${NSIS_filename}"
InstallDir "@NSIS_INSTALLDIR@\@FBSTRING_CompanyName@"
ShowInstDetails hide
SilentInstall silent
Function .onInit
FunctionEnd
Section "MainSection" SEC01
SetOutPath $INSTDIR
#File "@CMAKE_CURRENT_SOURCE_DIR@\Win\WiX\gcsplash.bmp"
#File "@CMAKE_CURRENT_SOURCE_DIR@\Win\WiX\gcdone.bmp"
#newadvsplash::show 2500 300 200 -1 $INSTDIR\gcsplash.bmp
#Pop $0
SetOutPath $INSTDIR\msi
File "${MSI_FILE}"
ExecWait 'msiexec /quiet /i "${MSI_FILE}" /liare+ "$INSTDIR\${MSI_FILE}.log' $0
${If} $0 != 0
MessageBox MB_OK "Error installing plugin. Please see '$INSTDIR\${MSI_FILE}.log' for details"
Abort "Could not install"
${EndIf}
ExecWait 'msiexec /quiet /fa "${MSI_FILE}" /liare+ "$INSTDIR\${MSI_FILE}_repair.log"' $0
${If} $0 != 0
MessageBox MB_OK "Error installing plugin. Please see '$INSTDIR\${MSI_FILE}.log' for details"
Abort "Could not install"
${EndIf}
#newadvsplash::stop /WAIT /FADEOUT
#newadvsplash::show 200000 500 500 -1 $TEMP\gcdone.bmp
#Pop $0
#Delete $TEMP\gcsplash.bmp
#Delete $TEMP\gcdone.bmp
SectionEnd
Section -Post
SectionEnd
###################### Installers ######################
set(WIX_HEAT_FLAGS
-gg # Generate GUIDs
-srd # Suppress Root Dir
-cg PluginDLLGroup # Set the Component group name
-dr INSTALLDIR # Set the directory ID to put the files in
)
find_program(
MAKE_NSIS "makensis.exe"
PATHS "$ENV{PROGRAMFILES}/NSIS")
if (MAKE_NSIS)
message(STATUS "Found NSIS at ${MAKE_NSIS}")
endif()
macro (add_wix_installer_helper)
add_wix_installer( ${PLUGIN_NAME}
${WIX_SOURCE_FILE}
PluginDLLGroup
${FB_BIN_DIR}/${PLUGIN_NAME}/${CMAKE_CFG_INTDIR}/
${FB_BIN_DIR}/${PLUGIN_NAME}/${CMAKE_CFG_INTDIR}/${FBSTRING_PluginFileName}.dll
${PROJECT_NAME}
)
# Sign the WiX installer for all users
firebreath_sign_file("${PLUGIN_NAME}${FB_WIX_SUFFIX}"
"${FB_WIX_DEST}"
"${CMAKE_CURRENT_SOURCE_DIR}/cert/cert.pfx"
"${CMAKE_CURRENT_SOURCE_DIR}/cert/password"
"http://timestamp.globalsign.com/scripts/timstamp.dll ")
if (MAKE_NSIS)
configure_file(${CMAKE_CURRENT_SOURCE_DIR}/Win/WiX/gradecam_installer.nsi ${FB_BIN_DIR}/${PLUGIN_NAME}/${NSIS_REGNAME}_gradecam_installer.nsi @ONLY)
configure_file(${CMAKE_CURRENT_SOURCE_DIR}/Win/WiX/gradecam_installer_silent.nsi ${FB_BIN_DIR}/${PLUGIN_NAME}/${NSIS_REGNAME}_gradecam_installer_silent.nsi @ONLY)
############ EXE Installer for all users install ############
add_custom_command(TARGET ${PLUGIN_NAME}${FB_WIX_SUFFIX}
POST_BUILD COMMAND
${MAKE_NSIS}
-DNSIS_filename=${NSIS_REGNAME}.exe
-DMSI_FILE=${FB_WIX_FNAME} -NOCD
${FB_BIN_DIR}/${PLUGIN_NAME}/${NSIS_REGNAME}_gradecam_installer.nsi
WORKING_DIRECTORY
${FB_BIN_DIR}/${PLUGIN_NAME}/${CMAKE_CFG_INTDIR}/
)
firebreath_sign_file("${PLUGIN_NAME}${FB_WIX_SUFFIX}"
"${FB_BIN_DIR}/${PLUGIN_NAME}/${CMAKE_CFG_INTDIR}/${NSIS_REGNAME}.exe"
"${CMAKE_CURRENT_SOURCE_DIR}/cert/cert.pfx"
"${CMAKE_CURRENT_SOURCE_DIR}/cert/password"
"http://timestamp.globalsign.com/scripts/timstamp.dll ")
add_custom_command(TARGET ${PLUGIN_NAME}${FB_WIX_SUFFIX}
POST_BUILD COMMAND
${MAKE_NSIS}
-DNSIS_filename=${NSIS_SILENTNAME}.exe
-DMSI_FILE=${FB_WIX_FNAME} -NOCD
${FB_BIN_DIR}/${PLUGIN_NAME}/${NSIS_REGNAME}_gradecam_installer_silent.nsi
WORKING_DIRECTORY
${FB_BIN_DIR}/${PLUGIN_NAME}/${CMAKE_CFG_INTDIR}/
)
firebreath_sign_file("${PLUGIN_NAME}${FB_WIX_SUFFIX}"
"${FB_BIN_DIR}/${PLUGIN_NAME}/${CMAKE_CFG_INTDIR}/${NSIS_SILENTNAME}.exe"
"${CMAKE_CURRENT_SOURCE_DIR}/cert/cert.pfx"
"${CMAKE_CURRENT_SOURCE_DIR}/cert/password"
"http://timestamp.globalsign.com/scripts/timstamp.dll ")
endif(MAKE_NSIS)
endmacro()
######## Installer init stuff ########
######## Per-User installer ########
set(NSIS_INSTALLDIR "$APPDATA")
set(EXECUTION_LEVEL "user")
set(WIX_FORCE_PER "user")
set(WIX_HEAT_SUFFIX "_HKCU")
set(FB_WIX_SUFFIX _WiXInstall)
set(FB_WIX_DEST "${FB_BIN_DIR}/${PLUGIN_NAME}/${CMAKE_CFG_INTDIR}/${FBSTRING_PluginFileName}.msi")
set(WIX_SOURCE_FILE ${CMAKE_CURRENT_SOURCE_DIR}/Win/WiX/GCPluginInstaller.wxs)
set(NSIS_REGNAME ${FBSTRING_PluginFileName})
set(NSIS_SILENTNAME ${FBSTRING_PluginFileName}_silent)
get_filename_component(FB_WIX_FNAME ${FB_WIX_DEST} NAME)
add_wix_installer_helper()
####### Per-user that doesn't uninstall ########
set(EXECUTION_LEVEL "user")
set(FB_WIX_SUFFIX _WiXInstallOverwrite)
set(FB_WIX_DEST ${FB_BIN_DIR}/${PLUGIN_NAME}/${CMAKE_CFG_INTDIR}/${FBSTRING_PluginFileName}_overwrite.msi)
set(WIX_SOURCE_FILE ${CMAKE_CURRENT_SOURCE_DIR}/Win/WiX/GCPluginInstaller_nouninstall.wxs)
set(NSIS_REGNAME ${FBSTRING_PluginFileName}_overwrite)
set(NSIS_SILENTNAME ${FBSTRING_PluginFileName}_overwrite_silent)
get_filename_component(FB_WIX_FNAME ${FB_WIX_DEST} NAME)
add_wix_installer_helper()
####### All Users installer ########
set(EXECUTION_LEVEL "admin")
set(NSIS_INSTALLDIR "$PROGRAMFILES")
set(WIX_FORCE_PER "machine")
set(WIX_HEAT_SUFFIX "_HKLM")
set(FB_WIX_SUFFIX _WiXInstallPerMachine)
set(FB_WIX_DEST ${FB_BIN_DIR}/${PLUGIN_NAME}/${CMAKE_CFG_INTDIR}/${FBSTRING_PluginFileName}_allusers.msi)
set(WIX_SOURCE_FILE ${CMAKE_CURRENT_SOURCE_DIR}/Win/WiX/GCPluginInstaller_AllUsers.wxs)
set(NSIS_REGNAME ${FBSTRING_PluginFileName}_allusers)
set(NSIS_SILENTNAME ${FBSTRING_PluginFileName}_allusers_silent)
get_filename_component(FB_WIX_FNAME ${FB_WIX_DEST} NAME)
add_wix_installer_helper()
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment