[Spice-devel] [PATCH usbclerk 6/6] Replace NSIS with MSI
Marc-André Lureau
marcandre.lureau at gmail.com
Tue Feb 19 02:35:31 PST 2013
Requires last msitools from Git. Release should follow soon.
---
Makefile.am | 7 +-
configure.ac | 2 +-
usbclerk.nsis.in | 192 -------------------------------------------------------
usbclerk.wxs.in | 66 +++++++++++++++++++
4 files changed, 69 insertions(+), 198 deletions(-)
delete mode 100644 usbclerk.nsis.in
create mode 100644 usbclerk.wxs.in
diff --git a/Makefile.am b/Makefile.am
index 7e5e994..3b73957 100644
--- a/Makefile.am
+++ b/Makefile.am
@@ -10,8 +10,5 @@ usbclerk_SOURCES = usbclerk.cpp vdlog.cpp usbclerk.h vdlog.h
usbclerktest_LDFLAGS =
usbclerktest_SOURCES = usbclerktest.cpp
-EXTRA_DIST = usbclerk.nsis
-
-usbclerk-setup.exe: usbclerk.nsis
- makensis $^
-
+EXTRA_DIST = usbclerk.wxs.in
+CONFIG_STATUS_DEPENDENCIES = usbclerk.wxs.in
diff --git a/configure.ac b/configure.ac
index c6c9329..cb40a36 100644
--- a/configure.ac
+++ b/configure.ac
@@ -19,7 +19,7 @@ m4_ifdef([AM_SILENT_RULES],[AM_SILENT_RULES([yes])])
AC_OUTPUT([
Makefile
-usbclerk.nsis
+usbclerk.wxs
])
AC_MSG_NOTICE([
diff --git a/usbclerk.nsis.in b/usbclerk.nsis.in
deleted file mode 100644
index 22ca7b3..0000000
--- a/usbclerk.nsis.in
+++ /dev/null
@@ -1,192 +0,0 @@
-#!Nsis Installer Command Script
-#
-# This is an NSIS Installer Command Script generated automatically
-# by the Fedora nsiswrapper program. For more information see:
-#
-# http://nsis.sourceforge.net
-#
-# To build an installer from the script you would normally do:
-#
-# makensis usbclerk-installer.nsis
-#
-# which will generate the output file 'usbclerk-installer.exe' which is a Windows
-# installer containing your program.
-
-# Modern UI example script
-!include MUI.nsh
-!include x64.nsh
-
-!define MyName usbclerk
-!define MySetup ${MyName}-setup
-
-!define VERSION @VERSION@
-
-!define SpiceRegKey "Software\Spice"
-!define UsbClerkRegKey "Software\Spice\${MyName}"
-!define RemoveRegKey "Software\Microsoft\Windows\CurrentVersion\Uninstall\${MyName}"
-
-Name ${MyName}
-OutFile ${MySetup}.exe
-
-InstallDir "$WINDIR\Installer\${MyName}"
-InstallDirRegKey HKLM ${UsbClerkRegKey} InstallDir
-
-
-RequestExecutionLevel admin
-ShowInstDetails hide
-ShowUninstDetails hide
-
-SetCompressor lzma
-
-XPStyle on
-
-#!define MUI_ABORTWARNING
-#!define MUI_FINISHPAGE_NOAUTOCLOSE
-#!define MUI_UNFINISHPAGE_NOAUTOCLOSE
-
-!insertmacro MUI_PAGE_WELCOME
-!insertmacro MUI_PAGE_LICENSE LICENSE
-# !insertmacro MUI_PAGE_DIRECTORY
-!insertmacro MUI_PAGE_INSTFILES
-
-!insertmacro MUI_LANGUAGE "English"
-
-#DirText "Please select the installation folder."
-
-#--------------------------------
-#Version Information
- VIProductVersion ${VERSION}
- VIAddVersionKey "ProductName" "${MySetup}"
- VIAddVersionKey "CompanyName" "Red Hat"
- VIAddVersionKey "LegalCopyright" "Red Hat Inc 2012"
- VIAddVersionKey "FileDescription" "An installer for usbclerk service"
- VIAddVersionKey "FileVersion" ${VERSION}
-#--------------------------------
-
-# abort if not admin
-!macro verify_admin id
- DetailPrint "Checking admin privileges"
-
- # ClearErrors
- # UserInfo::GetName
- # IfErrors usbclerk_install_fail_get_user
- UserInfo::GetAccountType
- Pop $0
- StrCmp $0 "Admin" ${id}_user_is_admin ${id}_user_is_not_admin
-${id}_user_is_not_admin:
- DetailPrint "User does not have admin privileges ... aborting"
- messageBox MB_OK "User does not have admin privileges ... aborting"
- Abort
-${id}_user_is_admin:
- DetailPrint "User has admin privileges"
-!macroend
-
-# work on 64 bit OS too.
-!macro work_on_64
- ${If} ${RunningX64}
- ${DisableX64FSRedirection}
- SetRegView 64
- ${EndIf}
-!macroend
-
-Function .onInit
- !insertmacro verify_admin "onInit"
- !insertmacro work_on_64
-FunctionEnd
-
-Function un.onInit
- !insertmacro verify_admin "un.onInit"
- !insertmacro work_on_64
-FunctionEnd
-
-!macro compare_versions f
- IfFileExists ${f} +1 compare_versions_done
-
- ${GetFileVersion} ${f} $0
-
- ${VersionCompare} $0 ${VERSION} $1
-
- StrCmp $1 2 compare_versions_done # a newer version is now being installed
-
- # we are here ==> a newer version is installed so bail out
- DetailPrint "About to install ${MyName} of version ${VERSION}"
- DetailPrint "${MyName} of version $0 is already installed"
- DetailPrint "A Newer (or equal) version is already installed -- aborting"
- Abort
-
-compare_versions_done:
- DetailPrint "Go on with ${MyName} installation"
-!macroend
-
-!macro stop_and_remove_service
- ReadRegStr $1 HKLM ${UsbClerkRegKey} InstDir
- ReadEnvStr $0 COMSPEC
- nsExec::ExecToLog '$0 /C net stop usbclerk'
- nsExec::ExecToLog '$0 /C "$1\usbclerk.exe" uninstall'
- Delete "$1\Uninstall_usbclerk.exe"
- Delete "$1\usbclerk.exe"
- Delete "$1\license.rtf"
- Delete "$1\GPL"
- Delete "$1\LICENSE"
-!macroend
-
-
-#
-# FixMe check version
-Function uninstall_if_needed
- ReadRegStr $0 HKLM ${UsbClerkRegKey} Uninstall
- StrCmp $0 "" uninstall_is_not_needed uninstall_is_needed
-uninstall_is_needed:
- DetailPrint "Removing already installed ${MyName} service"
- !insertmacro stop_and_remove_service
- DetailPrint "Done, installation of new ${MyName} continues"
-uninstall_is_not_needed:
-FunctionEnd
-
-
-
-Section "Install"
- SectionIn RO
-
- # !insertmacro verify_admin install
-
- # uncomment this when usbclerk.exe gets a real version
- # ReadRegStr $0 HKLM ${UsbClerkRegKey} InstDir
- # !insertmacro compare_versions $0\usbclerk.exe
-
- Call uninstall_if_needed
-
- SetOutPath "$INSTDIR"
-
- File usbclerk.exe
- File license.rtf
- File GPL
- File LICENSE
- ReadEnvStr $0 COMSPEC
- nsExec::ExecToLog '$0 /C "$INSTDIR\usbclerk.exe" install'
- nsExec::ExecToLog '$0 /C net start usbclerk'
- WriteUninstaller Uninstall_usbclerk.exe
- WriteRegStr HKLM ${UsbClerkRegKey} "Uninstall" "$INSTDIR\Uninstall_usbclerk.exe"
- WriteRegStr HKLM ${UsbClerkRegKey} "InstDir" "$INSTDIR"
-
- # add uninstall info
- WriteRegStr HKLM "${RemoveRegKey}" "DisplayName" \
- "UsbClerk -- A service for installing WinUSB drivers"
- WriteRegStr HKLM "${RemoveRegKey}" "UninstallString" \
- "$\"$INSTDIR\Uninstall_usbclerk.exe$\""
-SectionEnd
-
-Section "Uninstall"
- # !insertmacro verify_admin uninstall
- !insertmacro stop_and_remove_service
- RMDir "$INSTDIR"
- DeleteRegKey HKLM "${UsbClerkRegKey}\Uninstall"
- DeleteRegKey HKLM "${UsbClerkRegKey}\InstDir"
- DeleteRegKey /ifempty HKLM "${UsbClerkRegKey}"
- DeleteRegKey /ifempty HKLM "${SpiceRegKey}"
-
- # delete uninstall info
- DeleteRegKey HKLM "${RemoveRegKey}\DisplayName"
- DeleteRegKey HKLM "${RemoveRegKey}\UninstallString"
- DeleteRegKey /ifempty HKLM "${RemoveRegKey}"
-SectionEnd
diff --git a/usbclerk.wxs.in b/usbclerk.wxs.in
new file mode 100644
index 0000000..7b838d8
--- /dev/null
+++ b/usbclerk.wxs.in
@@ -0,0 +1,66 @@
+<?xml version="1.0" encoding="utf-8"?>
+
+<Wix xmlns="http://schemas.microsoft.com/wix/2006/wi">
+
+ <?define Version = "@VERSION@"?>
+ <?define UpgradeCode = "4a2c31e6-b10b-4c56-be28-c1ac35f5c52e"?>
+ <Product Id="*" Name="USB Clerk" Manufacturer="Red Hat, Inc."
+ Version="$(var.Version)" UpgradeCode="$(var.UpgradeCode)"
+ Language="1033">
+
+ <Package InstallerVersion="200" Compressed="yes" Comments="comments"/>
+ <Media Id="1" Cabinet="cabinet.cab" EmbedCab="yes"/>
+
+ <Property Id="ARPHELPLINK" Value="http://www.spice-space.org"/>
+ <Property Id="ARPNOMODIFY" Value="1"/>
+ <Property Id="ARPNOREPAIR" Value="1"/>
+ <Upgrade Id="$(var.UpgradeCode)">
+ <UpgradeVersion Minimum="$(var.Version)" OnlyDetect="yes" Property="NEWERVERSIONDETECTED"/>
+ <UpgradeVersion Minimum="0.0.0" Maximum="$(var.Version)" IncludeMinimum="yes" IncludeMaximum="no" Property="OLDERVERSIONBEINGUPGRADED"/>
+ </Upgrade>
+ <Condition Message="USB Clerk is already installed.">NOT NEWERVERSIONDETECTED</Condition>
+ <InstallExecuteSequence>
+ <RemoveExistingProducts After="InstallValidate"/>
+ </InstallExecuteSequence>
+
+ <!-- try to uninstall NSIS -->
+ <Property Id='NSISINSTALL'>
+ <RegistrySearch Id='NSISSearch' Root='HKLM' Key='Software\Spice\usbclerk' Type="raw" Name='Uninstall'/>
+ </Property>
+ <CustomAction Id="NSISUninstall" Property="NSISINSTALL" ExeCommand="/S" Execute="deferred" Impersonate="no" Return="ignore"/>
+ <InstallExecuteSequence>
+ <AppSearch Sequence='1'/>
+ <Custom Action="NSISUninstall" After="InstallInitialize">NSISINSTALL AND NOT Installed</Custom>
+ </InstallExecuteSequence>
+
+ <Directory Id="TARGETDIR" Name="SourceDir">
+ <Directory Id="ProgramFilesFolder">
+ <Directory Id="INSTALLDIR" Name="USBClerk">
+ <Component Id="CUSBClerk" Guid="e99861f7-524c-4107-860d-27f866072e53">
+ <File Id='usbclerkexe' Name='usbclerk.exe' DiskId='1' Source='usbclerk.exe' KeyPath='yes'/>
+ <ServiceInstall Id="USBClerkServiceInstall"
+ Name="USBClerk"
+ DisplayName="USB Clerk service"
+ Description="A Spice service for USB redirection"
+ Type="ownProcess"
+ Start="auto"
+ Account="[SERVICEACCOUNT]"
+ Password="[SERVICEPASSWORD]"
+ ErrorControl="normal"/>
+ <ServiceControl Id="StartService"
+ Name="USBClerk"
+ Start="install"
+ Stop="both"
+ Remove="uninstall"
+ Wait="yes"/>
+ </Component>
+ </Directory>
+ </Directory>
+ </Directory>
+
+ <Feature Id="Complete" Level="1">
+ <ComponentRef Id="CUSBClerk"/>
+ </Feature>
+
+ </Product>
+</Wix>
--
1.8.1.1.439.g50a6b54
More information about the Spice-devel
mailing list