diff options
author | Michael Schuster <michael@schuster.ms> | 2020-09-05 08:35:53 +0300 |
---|---|---|
committer | Michael Schuster <michael@schuster.ms> | 2020-09-21 17:40:19 +0300 |
commit | a9014f9852a8df1042ec086e10f46d963d10c6af (patch) | |
tree | 9ccd6dbc0f2ceb2de56ce2683934c442614d1acc /admin | |
parent | f321cd8ae60ddb84662d739af28530c663be36b2 (diff) |
Windows MSI: Add MSI scripts and UI resources
Uses CMake to generate and install all required files in the "msi/" directory.
Signed-off-by: Michael Schuster <michael@schuster.ms>
Diffstat (limited to 'admin')
-rw-r--r-- | admin/win/msi/CMakeLists.txt | 25 | ||||
-rw-r--r-- | admin/win/msi/Nextcloud.wxs | 207 | ||||
-rw-r--r-- | admin/win/msi/OEM.wxi.in | 54 | ||||
-rw-r--r-- | admin/win/msi/Platform.wxi | 38 | ||||
-rw-r--r-- | admin/win/msi/collect-transform.xsl.in | 44 | ||||
-rw-r--r-- | admin/win/msi/gui/banner.bmp | bin | 0 -> 85894 bytes | |||
-rw-r--r-- | admin/win/msi/gui/banner.svg | 72 | ||||
-rw-r--r-- | admin/win/msi/gui/dialog.bmp | bin | 0 -> 464774 bytes | |||
-rw-r--r-- | admin/win/msi/make-msi.bat.in | 26 |
9 files changed, 466 insertions, 0 deletions
diff --git a/admin/win/msi/CMakeLists.txt b/admin/win/msi/CMakeLists.txt new file mode 100644 index 000000000..8d7597cb3 --- /dev/null +++ b/admin/win/msi/CMakeLists.txt @@ -0,0 +1,25 @@ +if(CMAKE_SIZEOF_VOID_P MATCHES 4) + set(MSI_BUILD_ARCH x86) +else() + set(MSI_BUILD_ARCH x64) +endif() + +string(SUBSTRING ${GIT_SHA1} 0 7 GIT_REVISION) + +set(VERSION "${MIRALL_VERSION_MAJOR}.${MIRALL_VERSION_MINOR}.${MIRALL_VERSION_PATCH}.${MIRALL_VERSION_BUILD}") + +set(MSI_INSTALLER_FILENAME "${APPLICATION_SHORTNAME}-${VERSION}-${MSI_BUILD_ARCH}.msi") + +configure_file(OEM.wxi.in ${CMAKE_CURRENT_BINARY_DIR}/OEM.wxi) +configure_file(collect-transform.xsl.in ${CMAKE_CURRENT_BINARY_DIR}/collect-transform.xsl) +configure_file(make-msi.bat.in ${CMAKE_CURRENT_BINARY_DIR}/make-msi.bat) + +install(FILES + ${CMAKE_CURRENT_BINARY_DIR}/OEM.wxi + ${CMAKE_CURRENT_BINARY_DIR}/collect-transform.xsl + ${CMAKE_CURRENT_BINARY_DIR}/make-msi.bat + Platform.wxi + Nextcloud.wxs + gui/banner.bmp + gui/dialog.bmp + DESTINATION msi/) diff --git a/admin/win/msi/Nextcloud.wxs b/admin/win/msi/Nextcloud.wxs new file mode 100644 index 000000000..7e8406d32 --- /dev/null +++ b/admin/win/msi/Nextcloud.wxs @@ -0,0 +1,207 @@ +<?xml version="1.0" encoding="utf-8"?> +<!-- + * + * Copyright (C) by Michael Schuster <michael.schuster@nextcloud.com> + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY + * or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * for more details. + * +--> +<?include $(sys.CURRENTDIR)OEM.wxi?> +<?include $(sys.CURRENTDIR)Platform.wxi?> + +<Wix xmlns="http://schemas.microsoft.com/wix/2006/wi" xmlns:util="http://schemas.microsoft.com/wix/UtilExtension"> + + <!-- + When to change the Product GUID: + https://www.firegiant.com/wix/tutorial/upgrades-and-modularization/ + https://www.firegiant.com/wix/tutorial/upgrades-and-modularization/checking-for-oldies/ + + We change the Product Id for every release, to let up-/downgrading always work. + But we then should never change the UpgradeCode. + --> + <Product Name="$(var.AppName)" Manufacturer="$(var.AppVendor)" + Id="*" + UpgradeCode="$(var.UpgradeCode)" + Language="1033" Codepage="$(var.codepage)" Version="$(var.VerFull)"> + <Package Id="*" Keywords="Installer" Description="$(var.AppName) $(var.VerDesc)" Manufacturer="$(var.AppVendor)" + InstallerVersion="300" Platform="$(var.Platform)" Languages="1033" Compressed="yes" SummaryCodepage="$(var.codepage)" InstallScope="perMachine" /> + + <!-- + Upgrading: Since we always want to allow up-/downgrade, we don't specify a maximum version, thus + leading the WiX linker (light.exe) to trigger the following warning: + warning LGHT1076 : ICE61: This product should remove only older versions of itself. No Maximum version was detected for the current product. (WIX_UPGRADE_DETECTED) + We suppress the warning: light.exe -sw1076 + + If at some point we want to change this behaviour, read the docs: + https://www.firegiant.com/wix/tutorial/upgrades-and-modularization/replacing-ourselves/ + https://www.joyofsetup.com/2010/01/16/major-upgrades-now-easier-than-ever/ + --> + <MajorUpgrade Schedule="afterInstallInitialize" AllowDowngrades="yes" /> + + <Media Id="1" Cabinet="$(var.AppShortName).cab" EmbedCab="yes" /> + + <!-- If already installed: Use previously chosen path (use 32-bit registry like NSIS does) --> + <Property Id="INSTALLDIR"> + <RegistrySearch Id="RegistryInstallDir" Type="raw" Root="HKLM" Key="Software\$(var.AppVendor)\$(var.AppName)" Win64="no" /> + </Property> + + <!-- Detect legacy NSIS installation --> + <Property Id="NSIS_UNINSTALLEXE"> + <DirectorySearch Id="LegacyUninstallVersion" Path="[INSTALLDIR]"> + <FileSearch Name="Uninstall.exe" /> + </DirectorySearch> + </Property> + + <!-- Quit / restart application --> + <util:RestartResource ProcessName="$(var.AppExe)" /> + + <!-- Helper DLL Custom Actions --> + <SetProperty Id="ExecNsisUninstaller" Value=""$(var.AppShortName)" "[NSIS_UNINSTALLEXE]"" Before="ExecNsisUninstaller" Sequence="execute" /> + <SetProperty Id="RemoveNavigationPaneEntries" Value=""$(var.AppName)"" Before="RemoveNavigationPaneEntries" Sequence="execute" /> + + <InstallExecuteSequence> + <!-- Install: Remove previous NSIS installation, if detected --> + <Custom Action="ExecNsisUninstaller" Before="ProcessComponents">NSIS_UNINSTALLEXE AND NOT Installed</Custom> + + <!-- Uninstall: Remove sync folders from Explorer's Navigation Pane, only effective for the current user (home users) --> + <Custom Action="RemoveNavigationPaneEntries" After="RemoveFiles">(NOT UPGRADINGPRODUCTCODE) AND (REMOVE="ALL")</Custom> + + <!-- Schedule Reboot for the Shell Extensions --> + <ScheduleReboot After="InstallFinalize">NOT (DO_NOT_SCHEDULE_REBOOT=1)</ScheduleReboot> + </InstallExecuteSequence> + + <!-- "Add or Remove" Programs Entries --> + <Property Id="ARPPRODUCTICON">$(var.AppIcon)</Property> + <Property Id="ARPHELPLINK">$(var.AppHelpLink)</Property> + <Property Id="ARPURLINFOABOUT">$(var.AppInfoLink)</Property> + + <!-- https://www.firegiant.com/wix/tutorial/com-expression-syntax-miscellanea/add-or-remove-programs-entries/ --> + <!-- + <Property Id="ARPNOMODIFY">1</Property> + <Property Id="ARPNOREPAIR">1</Property> + --> + + <!-- App icon --> + <Icon Id="$(var.AppIcon)" SourceFile="$(var.HarvestAppDir)\$(var.AppIcon)" /> + + <!-- Custom bitmaps --> + <WixVariable Id="WixUIBannerBmp" Value="$(var.UIBannerBmp)" /> + <WixVariable Id="WixUIDialogBmp" Value="$(var.UIDialogBmp)" /> + + <!-- Custom icons --> + <!-- https://wixtoolset.org/documentation/manual/v3/wixui/wixui_customizations.html --> + <!-- + <WixVariable Id="WixUIExclamationIco" Value="ui\Exclam.ico" /> + <WixVariable Id="WixUIInfoIco" Value="ui\Info.ico" /> + <WixVariable Id="WixUINewIco" Value="ui\New.ico" /> + <WixVariable Id="WixUIUpIco" Value="ui\Up.ico" /> + --> + + <!-- Custom license --> + <!-- + <WixVariable Id="WixUILicenseRtf" Value="$(var.AppLicenseRtf)" /> + --> + + <UI> + <UIRef Id="WixUI_FeatureTree" /> + <UIRef Id="WixUI_ErrorProgressText" /> + + <!-- Skip the license page --> + <Publish Dialog="WelcomeDlg" Control="Next" Event="NewDialog" Value="CustomizeDlg" Order="3">1</Publish> + <!-- Skip the page on the way back too --> + <Publish Dialog="CustomizeDlg" Control="Back" Event="NewDialog" Value="WelcomeDlg" Order="3">1</Publish> + + <!-- https://wixtoolset.org/documentation/manual/v3/howtos/ui_and_localization/run_program_after_install.html --> + <Publish Dialog="ExitDialog" + Control="Finish" + Event="DoAction" + Value="LaunchApplication">WIXUI_EXITDIALOGOPTIONALCHECKBOX = 1 and NOT Installed</Publish> + + <ProgressText Action="ExecNsisUninstaller">Removing previous installation</ProgressText> + <ProgressText Action="KillProcess">Trying to terminate application process of previous installation</ProgressText> + <ProgressText Action="RemoveNavigationPaneEntries">Removing sync folders from Explorer's Navigation Pane</ProgressText> + </UI> + + <!-- "Launch" checkbox --> + <Property Id="WixShellExecTarget" Value="[#MainExecutable]" /> + <CustomAction Id="LaunchApplication" BinaryKey="WixCA" DllEntry="WixShellExec" Impersonate="yes" /> + <Property Id="WIXUI_EXITDIALOGOPTIONALCHECKBOXTEXT" Value="Launch $(var.AppName)" /> + <SetProperty Id="WIXUI_EXITDIALOGOPTIONALCHECKBOX" Value="1" Before="CostInitialize">NOT (LAUNCH=0)</SetProperty> + + <!-- Components --> + <Directory Id="TARGETDIR" Name="SourceDir"> + <Directory Id="$(var.PlatformProgramFilesFolder)" Name="PFiles"> + <Directory Id="INSTALLDIR" Name="$(var.AppName)"> + <!-- Shell Extensions --> + <Directory Id="ShellExtDir" Name="shellext" /> + </Directory> + </Directory> + + <Directory Id="ProgramMenuFolder" Name="Programs"> + <!-- Start Menu Shortcut --> + <Component Id="StartMenuIcon" Guid="*" Win64="$(var.PlatformWin64)"> + <Shortcut Id="StartMenu" Name="$(var.AppName)" Target="[INSTALLDIR]$(var.AppExe)" WorkingDirectory="INSTALLDIR" Icon="$(var.AppIcon)" IconIndex="0" Advertise="no" /> + <RegistryValue Root="HKCU" Key="Software\$(var.AppVendor)\$(var.AppName)" Name="installedStartMenuShortcut" Type="integer" Value="1" KeyPath="yes"/> + </Component> + </Directory> + + <Directory Id="DesktopFolder" Name="Desktop"> + <!-- Desktop Shortcut --> + <Component Id="DesktopIcon" Guid="*" Win64="$(var.PlatformWin64)"> + <Shortcut Id="Desktop" Name="$(var.AppName)" Target="[INSTALLDIR]$(var.AppExe)" WorkingDirectory="INSTALLDIR" Icon="$(var.AppIcon)" IconIndex="0" Advertise="no" /> + <RegistryValue Root="HKCU" Key="Software\$(var.AppVendor)\$(var.AppName)" Name="installedDesktopShortcut" Type="integer" Value="1" KeyPath="yes"/> + </Component> + </Directory> + </Directory> + + <DirectoryRef Id="TARGETDIR"> + <Component Id="RegistryEntries" Guid="*" Win64="no"> + <!-- Version numbers used to detect existing installation (use 32-bit registry like NSIS does) --> + <RegistryKey Root="HKLM" Key="Software\$(var.AppVendor)\$(var.AppName)" ForceCreateOnInstall="yes" ForceDeleteOnUninstall="yes"> + <RegistryValue Type="string" Value="[INSTALLDIR]" /> + <RegistryValue Type="integer" Name="VersionMajor" Value="$(var.VerMajor)" /> + <RegistryValue Type="integer" Name="VersionMinor" Value="$(var.VerMinor)" /> + <RegistryValue Type="integer" Name="VersionRevision" Value="$(var.VerRevision)" /> + <RegistryValue Type="integer" Name="VersionBuild" Value="$(var.VerBuild)" /> + + <!-- Save MSI ProductCode to allow being uninstalled by custom tools --> + <RegistryValue Type="string" Name="InstallerProductCode" Value="[ProductCode]" /> + </RegistryKey> + </Component> + </DirectoryRef> + + <!-- Features --> + <Feature Id="Client" Title="$(var.AppName) $(var.PlatformBitness)" Display="collapse" Absent="disallow" ConfigurableDirectory="INSTALLDIR" + Description="$(var.AppName) $(var.VerDesc)"> + <ComponentGroupRef Id="ClientFiles" /> + + <ComponentRef Id="RegistryEntries" /> + + <Feature Id="ShellExtensions" Title="Integration for Windows Explorer" + Description="This feature requires a reboot." > + <ComponentGroupRef Id="ShellExtensions" /> + + <Condition Level="0">(NO_SHELL_EXTENSIONS=1)</Condition> + </Feature> + + <Feature Id="StartMenuShortcut" Title="Start Menu Shortcut"> + <ComponentRef Id="StartMenuIcon" /> + <Condition Level="0">(NO_START_MENU_SHORTCUTS=1)</Condition> + </Feature> + + <Feature Id="DesktopShortcut" Title="Desktop Shortcut"> + <ComponentRef Id="DesktopIcon" /> + <Condition Level="0">(NO_DESKTOP_SHORTCUT=1)</Condition> + </Feature> + </Feature> + + </Product> +</Wix> diff --git a/admin/win/msi/OEM.wxi.in b/admin/win/msi/OEM.wxi.in new file mode 100644 index 000000000..d3f1787b9 --- /dev/null +++ b/admin/win/msi/OEM.wxi.in @@ -0,0 +1,54 @@ +<?xml version="1.0" encoding="utf-8"?> +<!-- + * + * Copyright (C) by Michael Schuster <michael.schuster@nextcloud.com> + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY + * or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * for more details. + * +--> +<Include> + + <!-- Changing the Vendor breaks registry (also NSIS) product detection --> + <?define AppVendor = "@APPLICATION_VENDOR@" ?> + + <!-- App Defines --> + <?define AppName = "@APPLICATION_NAME@" ?> + <?define AppShortName = "@APPLICATION_EXECUTABLE@" ?> + + <?define AppIcon = "@APPLICATION_ICON_NAME@.ico" ?> + <?define AppExe = "@APPLICATION_EXECUTABLE@.exe" ?> + + <?define AppHelpLink = "https://@APPLICATION_DOMAIN@/" ?> + <?define AppInfoLink = "$(var.AppHelpLink)" ?> + + <!-- Custom license: To use it, also remove the "Skip the license page" stuff in the <UI> section + and uncomment <WixVariable Id="WixUILicenseRtf"... + <?define AppLicenseRtf = "path\License.rtf" ?> + --> + + <!-- App Version --> + <?define VerMajor = "@MIRALL_VERSION_MAJOR@" ?> + <?define VerMinor = "@MIRALL_VERSION_MINOR@" ?> + <?define VerRevision = "@MIRALL_VERSION_PATCH@" ?> + <?define VerBuild = "@MIRALL_VERSION_BUILD@" ?> + <?define VerStd = "$(var.VerMajor).$(var.VerMinor).$(var.VerRevision)" ?> + <?define VerFull = "$(var.VerStd).$(var.VerBuild)" ?> + + <?define VerDesc = "@MIRALL_VERSION_STRING@ (Git revision @GIT_REVISION@)" ?> + + <!-- MSI upgrade support --> + <?define UpgradeCode = "@WIN_MSI_UPGRADE_CODE@" ?> + + <!-- UI resources --> + <?define UIBannerBmp = "banner.bmp" ?> + <?define UIDialogBmp = "dialog.bmp" ?> + +</Include> diff --git a/admin/win/msi/Platform.wxi b/admin/win/msi/Platform.wxi new file mode 100644 index 000000000..9eb7369a9 --- /dev/null +++ b/admin/win/msi/Platform.wxi @@ -0,0 +1,38 @@ +<?xml version="1.0" encoding="utf-8"?> +<!-- + * + * Copyright (C) by Michael Schuster <michael.schuster@nextcloud.com> + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY + * or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * for more details. + * +--> +<Include> + + <!-- + MSI packages are built either for x86 or x64, we use defines to maintain a single WiX script. + + Some hints: + https://www.joyofsetup.com/2010/05/14/working-hard-or-hardly-working/ + https://stackoverflow.com/questions/18628790/build-wix-3-6-project-targeting-x64 + https://www.howtobuildsoftware.com/index.php/how-do/1oQ/wix-detect-if-32-or-64-bit-windows-and-define-var + --> + + <?if $(var.Platform) = x64 ?> + <?define PlatformBitness = "(64-bit)" ?> + <?define PlatformWin64 = "yes" ?> + <?define PlatformProgramFilesFolder = "ProgramFiles64Folder" ?> + <?else ?> + <?define PlatformBitness = "(32-bit)" ?> + <?define PlatformWin64 = "no" ?> + <?define PlatformProgramFilesFolder = "ProgramFilesFolder" ?> + <?endif ?> + +</Include> diff --git a/admin/win/msi/collect-transform.xsl.in b/admin/win/msi/collect-transform.xsl.in new file mode 100644 index 000000000..475788d83 --- /dev/null +++ b/admin/win/msi/collect-transform.xsl.in @@ -0,0 +1,44 @@ +<?xml version="1.0" encoding="utf-8"?> +<xsl:stylesheet version="1.0" + xmlns:xsl="http://www.w3.org/1999/XSL/Transform" + xmlns:wix="http://schemas.microsoft.com/wix/2006/wi"> + + <xsl:output method="xml" indent="yes" /> + + <!-- Copy all attributes and elements to the output. --> + <xsl:template match="@*|*"> + <xsl:copy> + <xsl:apply-templates select="@*" /> + <xsl:apply-templates select="*" /> + </xsl:copy> + </xsl:template> + + <!-- Identify MainExecutable --> + <xsl:key name="exe-search" match="wix:File[contains(@Source, '@APPLICATION_EXECUTABLE@.exe')]" use="@Id" /> + <xsl:template match="wix:File[key('exe-search', @Id)]"> + <xsl:copy> + <xsl:apply-templates select="@*" /> + <xsl:attribute name="Id"> + <xsl:text>MainExecutable</xsl:text> + </xsl:attribute> + <xsl:apply-templates/> + </xsl:copy> + </xsl:template> + + <!-- Exclude Shell Extensions --> + <xsl:key name="shellext-search" match="wix:Component[contains(wix:File/@Source, 'shellext')]" use="@Id" /> + <xsl:template match="wix:Component[key('shellext-search', @Id)]" /> + <xsl:template match="wix:ComponentRef[key('shellext-search', @Id)]" /> + + <xsl:key name="shellext-search" match="wix:Directory[contains(@Name, 'shellext')]" use="@Id" /> + <xsl:template match="wix:Directory[key('shellext-search', @Id)]" /> + + <!-- Exclude VC Redist --> + <xsl:key name="vc-redist-32-search" match="wix:Component[contains(wix:File/@Source, 'vc_redist.x86.exe')]" use="@Id" /> + <xsl:template match="wix:Component[key('vc-redist-32-search', @Id)]" /> + <xsl:template match="wix:ComponentRef[key('vc-redist-32-search', @Id)]" /> + + <xsl:key name="vc-redist-64-search" match="wix:Component[contains(wix:File/@Source, 'vc_redist.x64.exe')]" use="@Id" /> + <xsl:template match="wix:Component[key('vc-redist-64-search', @Id)]" /> + <xsl:template match="wix:ComponentRef[key('vc-redist-64-search', @Id)]" /> +</xsl:stylesheet>
\ No newline at end of file diff --git a/admin/win/msi/gui/banner.bmp b/admin/win/msi/gui/banner.bmp Binary files differnew file mode 100644 index 000000000..7eba2ce1a --- /dev/null +++ b/admin/win/msi/gui/banner.bmp diff --git a/admin/win/msi/gui/banner.svg b/admin/win/msi/gui/banner.svg new file mode 100644 index 000000000..0739c16bf --- /dev/null +++ b/admin/win/msi/gui/banner.svg @@ -0,0 +1,72 @@ +<?xml version="1.0" encoding="UTF-8" standalone="no"?> +<svg + xmlns:dc="http://purl.org/dc/elements/1.1/" + xmlns:cc="http://creativecommons.org/ns#" + xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" + xmlns:svg="http://www.w3.org/2000/svg" + xmlns="http://www.w3.org/2000/svg" + xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" + xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" + version="1.1" + id="Layer_1" + x="0px" + y="0px" + viewBox="0 0 462.18754 54.374996" + enable-background="new 0 0 196.6 72" + xml:space="preserve" + inkscape:version="1.0 (4035a4f, 2020-05-01)" + sodipodi:docname="banner.svg" + width="493" + height="58" + inkscape:export-filename="/Users/misch/nextcloud/_icon/_msi/banner.png" + inkscape:export-xdpi="96" + inkscape:export-ydpi="96"><metadata + id="metadata20"><rdf:RDF><cc:Work + rdf:about=""><dc:format>image/svg+xml</dc:format><dc:type + rdf:resource="http://purl.org/dc/dcmitype/StillImage" /><dc:title /></cc:Work></rdf:RDF></metadata><defs + id="defs18"><clipPath + clipPathUnits="userSpaceOnUse" + id="clipPath8812"><circle + id="circle8814" + cx="95.669289" + cy="95.669296" + r="79.724197" + style="fill:#00080d;fill-opacity:1;stroke-width:1" /></clipPath></defs><sodipodi:namedview + pagecolor="#ffffff" + bordercolor="#666666" + borderopacity="1" + objecttolerance="10" + gridtolerance="10" + guidetolerance="10" + inkscape:pageopacity="1" + inkscape:pageshadow="2" + inkscape:window-width="1440" + inkscape:window-height="812" + id="namedview16" + showgrid="false" + inkscape:zoom="1.3964178" + inkscape:cx="264.97589" + inkscape:cy="100.72146" + inkscape:current-layer="Layer_1" + fit-margin-top="10" + fit-margin-left="10" + fit-margin-right="10" + fit-margin-bottom="10" + inkscape:window-x="0" + inkscape:window-y="23" + inkscape:window-maximized="1" + units="px" + inkscape:snap-bbox="true" + inkscape:bbox-paths="true" + inkscape:bbox-nodes="true" + inkscape:snap-bbox-edge-midpoints="true" + inkscape:snap-bbox-midpoints="true" + inkscape:snap-page="true" + inkscape:document-rotation="0" /><path + inkscape:connector-curvature="0" + id="path1052" + d="m 411.83858,10.876373 c -7.55537,0 -13.95917,5.122046 -15.94393,12.061838 -1.72495,-3.680971 -5.463,-6.259801 -9.76856,-6.259801 -5.92119,0 -10.78856,4.867369 -10.78856,10.78855 0,5.921172 4.86737,10.790763 10.78856,10.790763 4.30556,0 8.04361,-2.580407 9.76856,-6.262024 1.98476,6.94032 8.38856,12.064068 15.94393,12.064068 7.49951,0 13.87065,-5.046471 15.90617,-11.908511 1.75682,3.598038 5.4486,6.106467 9.69302,6.106467 5.92118,0 10.79076,-4.869591 10.79076,-10.790763 0,-5.921181 -4.86958,-10.78855 -10.79076,-10.78855 -4.24442,0 -7.9362,2.506858 -9.69302,6.10425 -2.03552,-6.861503 -8.40666,-11.906287 -15.90617,-11.906287 z m 0,6.333131 c 5.70346,0 10.25968,4.554019 10.25968,10.257456 0,5.703427 -4.55622,10.259672 -10.25968,10.259672 -5.70341,0 -10.25743,-4.556245 -10.25743,-10.259672 0,-5.703437 4.55402,-10.257454 10.25743,-10.257456 z m -25.71249,5.802039 c 2.4988,0 4.45763,1.9566 4.45763,4.455417 0,2.498807 -1.95883,4.457631 -4.45763,4.457631 -2.49882,0 -4.45544,-1.958824 -4.45544,-4.457631 0,-2.498817 1.95662,-4.455417 4.45544,-4.455417 z m 51.31168,0 c 2.49883,0 4.45764,1.9566 4.45764,4.455417 0,2.498807 -1.95883,4.457631 -4.45764,4.457631 -2.49879,0 -4.45541,-1.958824 -4.45541,-4.457631 0,-2.498817 1.95662,-4.455417 4.45541,-4.455417 z" + style="color:#000000;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:normal;font-family:sans-serif;text-indent:0;text-align:start;text-decoration:none;text-decoration-line:none;text-decoration-style:solid;text-decoration-color:#000000;letter-spacing:normal;word-spacing:normal;text-transform:none;writing-mode:lr-tb;direction:ltr;baseline-shift:baseline;text-anchor:start;white-space:normal;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;fill:#0082c9;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:3.56218;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate" + inkscape:export-filename="Nextcloud Hub logo variants.png" + inkscape:export-xdpi="300" + inkscape:export-ydpi="300" /></svg> diff --git a/admin/win/msi/gui/dialog.bmp b/admin/win/msi/gui/dialog.bmp Binary files differnew file mode 100644 index 000000000..f54894159 --- /dev/null +++ b/admin/win/msi/gui/dialog.bmp diff --git a/admin/win/msi/make-msi.bat.in b/admin/win/msi/make-msi.bat.in new file mode 100644 index 000000000..a8c5d4946 --- /dev/null +++ b/admin/win/msi/make-msi.bat.in @@ -0,0 +1,26 @@ +@echo off +set HarvestAppDir=%~1 +set BuildArch=@MSI_BUILD_ARCH@ + +if "%HarvestAppDir%" == "" ( + echo "Missing parameter: Please specify file collection source path (HarvestAppDir)." + exit 1 +) + +if "%WIX%" == "" ( + echo "WiX Toolset path not set (environment variable 'WIX'). Please install the WiX Toolset." + exit 1 +) + +Rem Generate collect.wxs +"%WIX%\bin\heat.exe" dir "%HarvestAppDir%" -dr INSTALLDIR -sreg -srd -sfrag -ag -cg ClientFiles -var var.HarvestAppDir -platform='%BuildArch%' -t collect-transform.xsl -out collect.wxs +if %ERRORLEVEL% neq 0 exit %ERRORLEVEL% + +Rem Compile en-US (https://www.firegiant.com/wix/tutorial/transforms/morphing-installers/) +"%WIX%\bin\candle.exe" -dcodepage=1252 -dPlatform=%BuildArch% -arch %BuildArch% -dHarvestAppDir="%HarvestAppDir%" -ext WixUtilExtension NCMsiHelper.wxs WinShellExt.wxs collect.wxs Nextcloud.wxs +if %ERRORLEVEL% neq 0 exit %ERRORLEVEL% + +Rem Link MSI package +"%WIX%\bin\light.exe" -sw1076 -ext WixUIExtension -ext WixUtilExtension -cultures:en-us NCMsiHelper.wixobj WinShellExt.wixobj collect.wixobj Nextcloud.wixobj -out "@MSI_INSTALLER_FILENAME@" + +exit %ERRORLEVEL% |