[Spice-devel] [PATCH win-vdagent] Learn to build spice-vdagent MSI installer

Yan Vugenfirer yvugenfi at redhat.com
Tue Feb 18 03:00:48 PST 2014


Hi Marc-Andre,

I think you should also add 'InstallPrivileges="elevated”’ as “Package" element attribute.

The Windows will prompt the user to elevate to administrator, otherwise the user might not have sufficient rights to install the service.

Best regards,
Yan.

On Feb 17, 2014, at 6:41 PM, Marc-André Lureau <marcandre.lureau at gmail.com> wrote:

> ---
> Makefile.am          | 23 +++++++++++++++-
> configure.ac         | 30 ++++++++++++++++++++
> spice-vdagent.wxs.in | 78 ++++++++++++++++++++++++++++++++++++++++++++++++++++
> 3 files changed, 130 insertions(+), 1 deletion(-)
> create mode 100644 spice-vdagent.wxs.in
> 
> diff --git a/Makefile.am b/Makefile.am
> index 749ef56..9fa9f14 100644
> --- a/Makefile.am
> +++ b/Makefile.am
> @@ -1,4 +1,5 @@
> NULL =
> +EXTRA_DIST =
> MAINTAINERCLEANFILES =
> 
> DIST_SUBDIRS = spice-protocol
> @@ -61,8 +62,28 @@ vdservice_rc.$(OBJEXT): vdservice/vdservice.rc
> 
> MAINTAINERCLEANFILES += vdservice_rc.$(OBJEXT)
> 
> +deps.txt:
> +	$(AM_V_GEN)rpm -qa | grep $(host_os) | sort | unix2dos > $@
> 
> -EXTRA_DIST =			\
> +MANUFACTURER = The Spice Project
> +
> +EXTRA_DIST += spice-vdagent.wxs.in
> +CONFIG_STATUS_DEPENDENCIES = spice-vdagent.wxs.in
> +
> +spice-vdagent-$(WIXL_ARCH)-$(VERSION)$(BUILDID).msi: spice-vdagent.wxs deps.txt all
> +	$(AM_V_GEN)DESTDIR=`mktemp -d`&&				\
> +	make -C $(top_builddir) install DESTDIR=$$DESTDIR >/dev/null &&	\
> +	MANUFACTURER="$(MANUFACTURER)" wixl -D SourceDir=$(prefix)	\
> +	  -D DESTDIR=$$DESTDIR$(prefix)					\
> +	  --arch $(WIXL_ARCH)  -o $@ $<
> +
> +msi: spice-vdagent-$(WIXL_ARCH)-$(VERSION)$(BUILDID).msi
> +
> +CLEANFILES = spice-vdagent-$(WIXL_ARCH)-$(VERSION)$(BUILDID).msi
> +
> +.PHONY: msi
> +
> +EXTRA_DIST +=			\
> 	$(top_srcdir)/.version	\
> 	tests/clipboard.py	\
> 	vdagent.sln		\
> diff --git a/configure.ac b/configure.ac
> index 12329b4..7f6511d 100644
> --- a/configure.ac
> +++ b/configure.ac
> @@ -9,11 +9,30 @@ AC_CONFIG_SRCDIR([vdagent])
> AC_CONFIG_HEADERS([config.h])
> AC_CONFIG_MACRO_DIR([m4])
> AC_CONFIG_AUX_DIR([build-aux])
> +AC_CANONICAL_HOST
> 
> AM_INIT_AUTOMAKE([1.11 foreign subdir-objects no-dist-gzip dist-xz tar-ustar])
> 
> AM_SILENT_RULES([yes])
> 
> +AC_ARG_WITH([buildid],
> +AS_HELP_STRING([--with-buildid=id], [Set additional build version details]))
> +AC_DEFINE_UNQUOTED([BUILDID], "$with_buildid", [Build version details])
> +if test "x$with_buildid" != x; then
> +  AC_SUBST([BUILDID], "-$with_buildid")
> +fi
> +
> +major=`echo $PACKAGE_VERSION | cut -d. -f1`
> +minor=`echo $PACKAGE_VERSION | cut -d. -f2`
> +micro=`echo $PACKAGE_VERSION | cut -d. -f3`
> +buildid=`echo $with_buildid | cut -d. -f1`
> +if test "x$buildid" = x; then
> +  buildid=0
> +fi
> +build=`expr $micro \* 256 + $buildid`
> +WINDOWS_PRODUCTVERSION="$major.$minor.$build"
> +AC_SUBST([WINDOWS_PRODUCTVERSION])
> +
> # Check for programs
> AC_PROG_CC
> AC_PROG_CXX
> @@ -21,6 +40,16 @@ AM_PROG_CC_C_O
> AC_PROG_INSTALL
> AC_CHECK_TOOL(WINDRES, [windres])
> 
> +case "$host" in
> +amd64*|x86_64*)
> +  WIXL_ARCH="x64"
> +;;
> +*)
> +  WIXL_ARCH="x86"
> +;;
> +esac
> +AC_SUBST(WIXL_ARCH)
> +
> AC_ARG_ENABLE([debug],
>     AS_HELP_STRING([--enable-debug], [Enable debugging]))
> 
> @@ -75,6 +104,7 @@ AC_CONFIG_SUBDIRS([spice-protocol])
> AC_CONFIG_FILES([
> Makefile
> mingw-spice-vdagent.spec
> +spice-vdagent.wxs
> ])
> AC_OUTPUT
> 
> diff --git a/spice-vdagent.wxs.in b/spice-vdagent.wxs.in
> new file mode 100644
> index 0000000..060f33d
> --- /dev/null
> +++ b/spice-vdagent.wxs.in
> @@ -0,0 +1,78 @@
> +<?xml version="1.0" encoding="utf-8"?>
> +
> +<Wix xmlns="http://schemas.microsoft.com/wix/2006/wi">
> +
> +  <?define Version = "@WINDOWS_PRODUCTVERSION@"?>
> +  <?define UpgradeCode = "7eb9b146-db04-42d7-a8ba-71fc8ced7eed"?>
> +  <?define Arch = "@WIXL_ARCH@"?>
> +  <?if $(var.Arch) = "x64"?>
> +      <?define ArchString = "64-bit"?>
> +      <?define ArchProgramFilesFolder = "ProgramFiles64Folder"?>
> +      <?define Win64 = "yes"?>
> +  <?else?>
> +      <?define ArchString = "32-bit"?>
> +      <?define ArchProgramFilesFolder = "ProgramFilesFolder"?>
> +      <?define Win64 = "no"?>
> +  <?endif?>
> +
> +  <Product Id="*" Name="Spice agent @VERSION@@BUILDID@ ($(var.ArchString))"
> +           Manufacturer="$(env.MANUFACTURER)"
> +           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="Product already installed.">NOT NEWERVERSIONDETECTED</Condition>
> +    <InstallExecuteSequence>
> +      <RemoveExistingProducts After="InstallFinalize"/>
> +    </InstallExecuteSequence>
> +
> +    <Directory Id="TARGETDIR" Name="SourceDir">
> +      <Directory Id="$(var.ArchProgramFilesFolder)">
> +        <Directory Id="INSTALLDIR" Name="SPICE agent">
> +          <Directory Id="Dbindir" Name="bin">
> +            <Component Id="CSpiceAgent" Guid="*">
> +              <File Id='spiceagent' Name='vdagent.exe' DiskId='1' Source='$(var.DESTDIR)/bin/vdagent.exe' KeyPath='yes'/>
> +            </Component>
> +            <Component Id="CSpiceService" Guid="*">
> +              <File Id='spiceservice' Name='vdservice.exe' DiskId='1' Source='$(var.DESTDIR)/bin/vdservice.exe' KeyPath='yes'/>
> +              <ServiceInstall Id="ServiceInstall"
> +                            Name="spice-agent"
> +                            DisplayName="Spice agent"
> +                            Description="The Spice guest agent"
> +                            Type="ownProcess"
> +                            Start="auto"
> +                            Account="[SERVICEACCOUNT]"
> +                            Password="[SERVICEPASSWORD]"
> +                            ErrorControl="normal"/>
> +              <ServiceControl Id="StartService"
> +                            Name="spice-agent"
> +                            Start="install"
> +                            Stop="both"
> +                            Remove="uninstall"
> +                            Wait="yes"/>
> +            </Component>
> +          </Directory>
> +          <Component Id="CDepsTxt" Guid="*">
> +            <File Id='depstxt' Name='deps.txt' DiskId='1' Source='deps.txt' KeyPath='yes'/>
> +          </Component>
> +        </Directory>
> +      </Directory>
> +    </Directory>
> +
> +    <Feature Id="Complete"  Level="1">
> +      <ComponentRef Id="CSpiceAgent"/>
> +      <ComponentRef Id="CSpiceService"/>
> +      <ComponentRef Id="CDepsTxt"/>
> +    </Feature>
> +
> +  </Product>
> +</Wix>
> -- 
> 1.8.4.2
> 
> _______________________________________________
> Spice-devel mailing list
> Spice-devel at lists.freedesktop.org
> http://lists.freedesktop.org/mailman/listinfo/spice-devel



More information about the Spice-devel mailing list