Browse Source

Adjust windows installer build:
* add branding
* only link third party drivers, don't ship'em
* add license

Armin Schrenk 3 years ago
parent
commit
8764c814d9

+ 10 - 0
.github/workflows/build.yml

@@ -440,6 +440,11 @@ jobs:
           timestampUrl: 'http://timestamp.digicert.com'
           folder: appdir/Cryptomator
           recursive: true
+      - name: Prepare env for building msi
+        run: |
+          $path = (Get-Location).Path + "\dist\win\resources" 
+          [Environment]::SetEnvironmentVariable("JpackageWixWizardResources", $path, 'Machine')
+        shell: pwsh
       - name: Create MSI
         run: >
           ${JAVA_HOME}/bin/jpackage
@@ -452,6 +457,11 @@ jobs:
           --vendor "Skymatic GmbH"
           --copyright "(C) 2016 - 2021 Skymatic GmbH"
           --app-version "${{ needs.metadata.outputs.versionNum }}"
+          --win-shortcut 
+          --win-menu 
+          --win-dir-chooser 
+          --resource-dir dist/win/resources 
+          --license-file dist/win/resources/license.rtf
       - name: Codesign MSI
         uses: skymatic/code-sign-action@v1.0.1
         with:

BIN
dist/win/resources/Cryptomator.ico


BIN
dist/win/resources/background.bmp


BIN
dist/win/resources/banner.bmp


+ 89 - 0
dist/win/resources/customWizard.wxi

@@ -0,0 +1,89 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Include>
+	<Fragment>
+		<!-- copy pasta from https://github.com/wixtoolset/wix3/blob/develop/src/ext/UIExtension/wixlib/WixUI_InstallDir.wxs with custom exit dialog-->
+		<UI Id="CustomWizard">
+			<TextStyle Id="WixUI_Font_Normal" FaceName="Tahoma" Size="8" />
+			<TextStyle Id="WixUI_Font_Bigger" FaceName="Tahoma" Size="12" />
+			<TextStyle Id="WixUI_Font_Title" FaceName="Tahoma" Size="9" Bold="yes" />
+
+			<Property Id="DefaultUIFont" Value="WixUI_Font_Normal" />
+			<Property Id="WixUI_Mode" Value="InstallDir" />
+
+			<DialogRef Id="BrowseDlg" />
+			<DialogRef Id="DiskCostDlg" />
+			<DialogRef Id="ErrorDlg" />
+			<DialogRef Id="FatalError" />
+			<DialogRef Id="FilesInUse" />
+			<DialogRef Id="MsiRMFilesInUse" />
+			<DialogRef Id="PrepareDlg" />
+			<DialogRef Id="ProgressDlg" />
+			<DialogRef Id="ResumeDlg" />
+			<DialogRef Id="UserExit" />
+
+			<Publish Dialog="BrowseDlg" Control="OK" Event="DoAction" Value="WixUIValidatePath" Order="3">1</Publish>
+			<Publish Dialog="BrowseDlg" Control="OK" Event="SpawnDialog" Value="InvalidDirDlg" Order="4"><![CDATA[NOT WIXUI_DONTVALIDATEPATH AND WIXUI_INSTALLDIR_VALID<>"1"]]></Publish>
+
+			<!-- custom end dialog -->
+			<Publish Dialog="MyExitDialog" Control="Finish" Event="EndDialog" Value="Return" Order="999">1</Publish>
+
+			<Publish Dialog="WelcomeDlg" Control="Next" Event="NewDialog" Value="LicenseAgreementDlg">NOT Installed</Publish>
+			<Publish Dialog="WelcomeDlg" Control="Next" Event="NewDialog" Value="VerifyReadyDlg">Installed AND PATCH</Publish>
+
+			<Publish Dialog="LicenseAgreementDlg" Control="Back" Event="NewDialog" Value="WelcomeDlg">1</Publish>
+			<Publish Dialog="LicenseAgreementDlg" Control="Next" Event="NewDialog" Value="InstallDirDlg">LicenseAccepted = "1"</Publish>
+
+			<Publish Dialog="InstallDirDlg" Control="Back" Event="NewDialog" Value="LicenseAgreementDlg">1</Publish>
+			<Publish Dialog="InstallDirDlg" Control="Next" Event="SetTargetPath" Value="[WIXUI_INSTALLDIR]" Order="1">1</Publish>
+			<Publish Dialog="InstallDirDlg" Control="Next" Event="DoAction" Value="WixUIValidatePath" Order="2">NOT WIXUI_DONTVALIDATEPATH</Publish>
+			<Publish Dialog="InstallDirDlg" Control="Next" Event="SpawnDialog" Value="InvalidDirDlg" Order="3"><![CDATA[NOT WIXUI_DONTVALIDATEPATH AND WIXUI_INSTALLDIR_VALID<>"1"]]></Publish>
+			<Publish Dialog="InstallDirDlg" Control="Next" Event="NewDialog" Value="VerifyReadyDlg" Order="4">WIXUI_DONTVALIDATEPATH OR WIXUI_INSTALLDIR_VALID="1"</Publish>
+			<Publish Dialog="InstallDirDlg" Control="ChangeFolder" Property="_BrowseProperty" Value="[WIXUI_INSTALLDIR]" Order="1">1</Publish>
+			<Publish Dialog="InstallDirDlg" Control="ChangeFolder" Event="SpawnDialog" Value="BrowseDlg" Order="2">1</Publish>
+
+			<Publish Dialog="VerifyReadyDlg" Control="Back" Event="NewDialog" Value="InstallDirDlg" Order="1">NOT Installed</Publish>
+			<Publish Dialog="VerifyReadyDlg" Control="Back" Event="NewDialog" Value="MaintenanceTypeDlg" Order="2">Installed AND NOT PATCH</Publish>
+			<Publish Dialog="VerifyReadyDlg" Control="Back" Event="NewDialog" Value="WelcomeDlg" Order="2">Installed AND PATCH</Publish>
+
+			<Publish Dialog="MaintenanceWelcomeDlg" Control="Next" Event="NewDialog" Value="MaintenanceTypeDlg">1</Publish>
+
+			<Publish Dialog="MaintenanceTypeDlg" Control="RepairButton" Event="NewDialog" Value="VerifyReadyDlg">1</Publish>
+			<Publish Dialog="MaintenanceTypeDlg" Control="RemoveButton" Event="NewDialog" Value="VerifyReadyDlg">1</Publish>
+			<Publish Dialog="MaintenanceTypeDlg" Control="Back" Event="NewDialog" Value="MaintenanceWelcomeDlg">1</Publish>
+
+			<Property Id="ARPNOMODIFY" Value="1" />
+
+			<!-- copy pasta from https://github.com/wixtoolset/wix3/blob/develop/src/ext/UIExtension/wixlib/ExitDialog.wxs with adjustments-->
+			<Dialog Id="MyExitDialog" Width="370" Height="270" Title="!(loc.ExitDialog_Title)">
+				<Control Id="Finish" Type="PushButton" X="236" Y="243" Width="56" Height="17" Default="yes" Cancel="yes" Text="!(loc.WixUIFinish)" />
+				<Control Id="Cancel" Type="PushButton" X="304" Y="243" Width="56" Height="17" Disabled="yes" Text="!(loc.WixUICancel)" />
+				<Control Id="Bitmap" Type="Bitmap" X="0" Y="0" Width="370" Height="234" TabSkip="no" Text="!(loc.ExitDialogBitmap)" />
+				<Control Id="Back" Type="PushButton" X="180" Y="243" Width="56" Height="17" Disabled="yes" Text="!(loc.WixUIBack)" />
+				<Control Id="BottomLine" Type="Line" X="0" Y="234" Width="370" Height="0" />
+				<Control Id="Description" Type="Text" X="135" Y="70" Width="220" Height="40" Transparent="yes" NoPrefix="yes" Text="!(loc.ExitDialogDescription)" />
+
+				<Control Id="Title" Type="Text" X="135" Y="20" Width="220" Height="60" Transparent="yes" NoPrefix="yes" Text="!(loc.ExitDialogTitle)" />
+				<!-- TODO: localize? -->
+				<Control Id="Suggestion" Type="Text" X="135" Y="100" Width="220" Height="60" Transparent="yes" NoPrefix="yes">
+					<Text>We recommend for the best user experience to download and install one of the following third party Windows drivers:</Text>
+				</Control>
+				<Control Id="WinFsp" Type="Hyperlink" X="140" Y="125" Width="220" Height="60" Transparent="yes">
+					<Text><![CDATA[• WinFsp (<a href="http://www.secfs.net/winfsp/rel/">Homepage</a>)]]></Text>
+				</Control>
+				<Control Id="Dokany" Type="Hyperlink" X="140" Y="137" Width="220" Height="60" Transparent="yes">
+					<Text><![CDATA[• Dokany (<a href="https://dokan-dev.github.io/">Homepage</a>)]]></Text>
+				</Control>
+			</Dialog>
+
+			<InstallUISequence>
+				<Show Dialog="MyExitDialog" Overridable="yes" OnExit="success"/>
+			</InstallUISequence>
+			<AdminUISequence>
+				<Show Dialog="MyExitDialog" Overridable="yes" OnExit="success"/>
+			</AdminUISequence>
+
+		</UI>
+
+		<UIRef Id="WixUI_Common" />
+	</Fragment>
+</Include>

+ 92 - 0
dist/win/resources/license.rtf

@@ -0,0 +1,92 @@
+{\rtf1\ansi\ansicpg1252\deff0\nouicompat{\fonttbl{\f0\fnil\fcharset0 Arial;}}
+{\colortbl ;\red0\green0\blue255;}
+{\*\generator Riched20 10.0.17134}\viewkind4\uc1 
+\pard\tx566\tx1133\tx1700\tx2267\tx2834\tx3401\tx3968\tx4535\tx5102\tx5669\tx6236\tx6803\b\fs16\lang7 Cryptomator is distributed under the GPLv3 License, found below. Please see the bottom of this document for any other license applicable to code used within Cryptomator.\b0\par
+\par
+\b\'a9 2016 \endash  2021 Skymatic GmbH\b0\par
+\par
+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 3 of the License, or (at your option) any later version.\par
+\par
+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.\par
+\par
+You should have received a copy of the GNU General Public License along with this program.  If not, see {{\field{\*\fldinst{HYPERLINK http://www.gnu.org/licenses/ }}{\fldrslt{http://www.gnu.org/licenses/\ul0\cf0}}}}\f0\fs16 .\par
+\par
+\b Cryptomator uses 49 third-party dependencies under the following licenses:\b0\par
+\tab Apache License v2.0:\par
+\tab\tab - HKDF-RFC5869 (at.favre.lib:hkdf:1.0.2 - {{\field{\*\fldinst{HYPERLINK https://github.com/patrickfav/hkdf }}{\fldrslt{https://github.com/patrickfav/hkdf\ul0\cf0}}}}\f0\fs16 )\par
+\tab\tab - jffi (com.github.jnr:jffi:1.2.23 - {{\field{\*\fldinst{HYPERLINK http://github.com/jnr/jffi }}{\fldrslt{http://github.com/jnr/jffi\ul0\cf0}}}}\f0\fs16 )\par
+\tab\tab - jnr-a64asm (com.github.jnr:jnr-a64asm:1.0.0 - {{\field{\*\fldinst{HYPERLINK http://nexus.sonatype.org/oss-repository-hosting.html/jnr-a64asm }}{\fldrslt{http://nexus.sonatype.org/oss-repository-hosting.html/jnr-a64asm\ul0\cf0}}}}\f0\fs16 )\par
+\tab\tab - jnr-constants (com.github.jnr:jnr-constants:0.9.15 - {{\field{\*\fldinst{HYPERLINK http://github.com/jnr/jnr-constants }}{\fldrslt{http://github.com/jnr/jnr-constants\ul0\cf0}}}}\f0\fs16 )\par
+\tab\tab - jnr-ffi (com.github.jnr:jnr-ffi:2.1.12 - {{\field{\*\fldinst{HYPERLINK http://github.com/jnr/jnr-ffi }}{\fldrslt{http://github.com/jnr/jnr-ffi\ul0\cf0}}}}\f0\fs16 )\par
+\tab\tab - FindBugs-jsr305 (com.google.code.findbugs:jsr305:3.0.2 - {{\field{\*\fldinst{HYPERLINK http://findbugs.sourceforge.net/ }}{\fldrslt{http://findbugs.sourceforge.net/\ul0\cf0}}}}\f0\fs16 )\par
+\tab\tab - Gson (com.google.code.gson:gson:2.8.6 - {{\field{\*\fldinst{HYPERLINK https://github.com/google/gson/gson }}{\fldrslt{https://github.com/google/gson/gson\ul0\cf0}}}}\f0\fs16 )\par
+\tab\tab - Dagger (com.google.dagger:dagger:2.27 - {{\field{\*\fldinst{HYPERLINK https://github.com/google/dagger }}{\fldrslt{https://github.com/google/dagger\ul0\cf0}}}}\f0\fs16 )\par
+\tab\tab - error-prone annotations (com.google.errorprone:error_prone_annotations:2.3.4 - {{\field{\*\fldinst{HYPERLINK http://nexus.sonatype.org/oss-repository-hosting.html/error_prone_parent/error_prone_annotations }}{\fldrslt{http://nexus.sonatype.org/oss-repository-hosting.html/error_prone_parent/error_prone_annotations\ul0\cf0}}}}\f0\fs16 )\par
+\tab\tab - Guava InternalFutureFailureAccess and InternalFutures (com.google.guava:failureaccess:1.0.1 - {{\field{\*\fldinst{HYPERLINK https://github.com/google/guava/failureaccess }}{\fldrslt{https://github.com/google/guava/failureaccess\ul0\cf0}}}}\f0\fs16 )\par
+\tab\tab - Guava: Google Core Libraries for Java (com.google.guava:guava:28.2-jre - {{\field{\*\fldinst{HYPERLINK https://github.com/google/guava/guava }}{\fldrslt{https://github.com/google/guava/guava\ul0\cf0}}}}\f0\fs16 )\par
+\tab\tab - Guava ListenableFuture only (com.google.guava:listenablefuture:9999.0-empty-to-avoid-conflict-with-guava - {{\field{\*\fldinst{HYPERLINK https://github.com/google/guava/listenablefuture }}{\fldrslt{https://github.com/google/guava/listenablefuture\ul0\cf0}}}}\f0\fs16 )\par
+\tab\tab - J2ObjC Annotations (com.google.j2objc:j2objc-annotations:1.3 - {{\field{\*\fldinst{HYPERLINK https://github.com/google/j2objc/ }}{\fldrslt{https://github.com/google/j2objc/\ul0\cf0}}}}\f0\fs16 )\par
+\tab\tab - Apache Commons CLI (commons-cli:commons-cli:1.4 - {{\field{\*\fldinst{HYPERLINK http://commons.apache.org/proper/commons-cli/ }}{\fldrslt{http://commons.apache.org/proper/commons-cli/\ul0\cf0}}}}\f0\fs16 )\par
+\tab\tab - javax.inject (javax.inject:javax.inject:1 - {{\field{\*\fldinst{HYPERLINK http://code.google.com/p/atinject/ }}{\fldrslt{http://code.google.com/p/atinject/\ul0\cf0}}}}\f0\fs16 )\par
+\tab\tab - Java Native Access (net.java.dev.jna:jna:5.1.0 - {{\field{\*\fldinst{HYPERLINK https://github.com/java-native-access/jna }}{\fldrslt{https://github.com/java-native-access/jna\ul0\cf0}}}}\f0\fs16 )\par
+\tab\tab - Java Native Access Platform (net.java.dev.jna:jna-platform:5.1.0 - {{\field{\*\fldinst{HYPERLINK https://github.com/java-native-access/jna }}{\fldrslt{https://github.com/java-native-access/jna\ul0\cf0}}}}\f0\fs16 )\par
+\tab\tab - Apache Commons Lang (org.apache.commons:commons-lang3:3.9 - {{\field{\*\fldinst{HYPERLINK http://commons.apache.org/proper/commons-lang/ }}{\fldrslt{http://commons.apache.org/proper/commons-lang/\ul0\cf0}}}}\f0\fs16 )\par
+\tab\tab - Jackrabbit WebDAV Library (org.apache.jackrabbit:jackrabbit-webdav:2.19.0 - {{\field{\*\fldinst{HYPERLINK http://jackrabbit.apache.org/jackrabbit-webdav/ }}{\fldrslt{http://jackrabbit.apache.org/jackrabbit-webdav/\ul0\cf0}}}}\f0\fs16 )\par
+\tab\tab - Jetty :: Http Utility (org.eclipse.jetty:jetty-http:9.4.17.v20190418 - {{\field{\*\fldinst{HYPERLINK http://www.eclipse.org/jetty }}{\fldrslt{http://www.eclipse.org/jetty\ul0\cf0}}}}\f0\fs16 )\par
+\tab\tab - Jetty :: IO Utility (org.eclipse.jetty:jetty-io:9.4.17.v20190418 - {{\field{\*\fldinst{HYPERLINK http://www.eclipse.org/jetty }}{\fldrslt{http://www.eclipse.org/jetty\ul0\cf0}}}}\f0\fs16 )\par
+\tab\tab - Jetty :: Security (org.eclipse.jetty:jetty-security:9.4.17.v20190418 - {{\field{\*\fldinst{HYPERLINK http://www.eclipse.org/jetty }}{\fldrslt{http://www.eclipse.org/jetty\ul0\cf0}}}}\f0\fs16 )\par
+\tab\tab - Jetty :: Server Core (org.eclipse.jetty:jetty-server:9.4.17.v20190418 - {{\field{\*\fldinst{HYPERLINK http://www.eclipse.org/jetty }}{\fldrslt{http://www.eclipse.org/jetty\ul0\cf0}}}}\f0\fs16 )\par
+\tab\tab - Jetty :: Servlet Handling (org.eclipse.jetty:jetty-servlet:9.4.17.v20190418 - {{\field{\*\fldinst{HYPERLINK http://www.eclipse.org/jetty }}{\fldrslt{http://www.eclipse.org/jetty\ul0\cf0}}}}\f0\fs16 )\par
+\tab\tab - Jetty :: Utilities (org.eclipse.jetty:jetty-util:9.4.17.v20190418 - {{\field{\*\fldinst{HYPERLINK http://www.eclipse.org/jetty }}{\fldrslt{http://www.eclipse.org/jetty\ul0\cf0}}}}\f0\fs16 )\par
+\tab\tab - Jetty :: Utilities :: Ajax(JSON) (org.eclipse.jetty:jetty-util-ajax:9.4.35.v20201120 - {{\field{\*\fldinst{HYPERLINK https://eclipse.org/jetty/jetty-util-ajax }}{\fldrslt{{\fldrslt{http://www.eclipse.org/jetty\ul0\cf0}}}}}\f0\fs16 )\par
+\tab\tab - Jetty :: Webapp Application Support (org.eclipse.jetty:jetty-webapp:9.4.17.v20190418 - {{\field{\*\fldinst{HYPERLINK http://www.eclipse.org/jetty }}{\fldrslt{http://www.eclipse.org/jetty\ul0\cf0}}}}\f0\fs16 )\par
+\tab\tab - Jetty :: XML utilities (org.eclipse.jetty:jetty-xml:9.4.17.v20190418 - {{\field{\*\fldinst{HYPERLINK http://www.eclipse.org/jetty }}{\fldrslt{http://www.eclipse.org/jetty\ul0\cf0}}}}\f0\fs16 )\par
+\tab BSD:\par
+\tab\tab - asm (org.ow2.asm:asm:7.1 - {{\field{\*\fldinst{HYPERLINK http://asm.ow2.org/ }}{\fldrslt{http://asm.ow2.org/\ul0\cf0}}}}\f0\fs16 )\par
+\tab\tab - asm-analysis (org.ow2.asm:asm-analysis:7.1 - {{\field{\*\fldinst{HYPERLINK http://asm.ow2.org/ }}{\fldrslt{http://asm.ow2.org/\ul0\cf0}}}}\f0\fs16 )\par
+\tab\tab - asm-commons (org.ow2.asm:asm-commons:7.1 - {{\field{\*\fldinst{HYPERLINK http://asm.ow2.org/ }}{\fldrslt{http://asm.ow2.org/\ul0\cf0}}}}\f0\fs16 )\par
+\tab\tab - asm-tree (org.ow2.asm:asm-tree:7.1 - {{\field{\*\fldinst{HYPERLINK http://asm.ow2.org/ }}{\fldrslt{http://asm.ow2.org/\ul0\cf0}}}}\f0\fs16 )\par
+\tab\tab - asm-util (org.ow2.asm:asm-util:7.1 - {{\field{\*\fldinst{HYPERLINK http://asm.ow2.org/ }}{\fldrslt{http://asm.ow2.org/\ul0\cf0}}}}\f0\fs16 )\par
+\tab Eclipse Public License - Version 1.0:\par
+\tab\tab - Jetty :: Http Utility (org.eclipse.jetty:jetty-http:9.4.17.v20190418 - {{\field{\*\fldinst{HYPERLINK http://www.eclipse.org/jetty }}{\fldrslt{http://www.eclipse.org/jetty\ul0\cf0}}}}\f0\fs16 )\par
+\tab\tab - Jetty :: IO Utility (org.eclipse.jetty:jetty-io:9.4.17.v20190418 - {{\field{\*\fldinst{HYPERLINK http://www.eclipse.org/jetty }}{\fldrslt{http://www.eclipse.org/jetty\ul0\cf0}}}}\f0\fs16 )\par
+\tab\tab - Jetty :: Security (org.eclipse.jetty:jetty-security:9.4.17.v20190418 - {{\field{\*\fldinst{HYPERLINK http://www.eclipse.org/jetty }}{\fldrslt{http://www.eclipse.org/jetty\ul0\cf0}}}}\f0\fs16 )\par
+\tab\tab - Jetty :: Server Core (org.eclipse.jetty:jetty-server:9.4.17.v20190418 - {{\field{\*\fldinst{HYPERLINK http://www.eclipse.org/jetty }}{\fldrslt{http://www.eclipse.org/jetty\ul0\cf0}}}}\f0\fs16 )\par
+\tab\tab - Jetty :: Servlet Handling (org.eclipse.jetty:jetty-servlet:9.4.17.v20190418 - {{\field{\*\fldinst{HYPERLINK http://www.eclipse.org/jetty }}{\fldrslt{http://www.eclipse.org/jetty\ul0\cf0}}}}\f0\fs16 )\par
+\tab\tab - Jetty :: Utilities (org.eclipse.jetty:jetty-util:9.4.17.v20190418 - {{\field{\*\fldinst{HYPERLINK http://www.eclipse.org/jetty }}{\fldrslt{http://www.eclipse.org/jetty\ul0\cf0}}}}\f0\fs16 )\par
+\tab\tab - Jetty :: Utilities :: Ajax(JSON) (org.eclipse.jetty:jetty-util-ajax:9.4.35.v20201120 - {{\field{\*\fldinst{HYPERLINK https://eclipse.org/jetty/jetty-util-ajax }}{\fldrslt{http://www.eclipse.org/jetty\ul0\cf0}}}}}\f0\fs16 )\par
+\tab\tab - Jetty :: Webapp Application Support (org.eclipse.jetty:jetty-webapp:9.4.17.v20190418 - {{\field{\*\fldinst{HYPERLINK http://www.eclipse.org/jetty }}{\fldrslt{http://www.eclipse.org/jetty\ul0\cf0}}}}\f0\fs16 )\par
+\tab\tab - Jetty :: XML utilities (org.eclipse.jetty:jetty-xml:9.4.17.v20190418 - {{\field{\*\fldinst{HYPERLINK http://www.eclipse.org/jetty }}{\fldrslt{http://www.eclipse.org/jetty\ul0\cf0}}}}\f0\fs16 )\par
+\tab Eclipse Public License - v 2.0:\par
+\tab\tab - jnr-posix (com.github.jnr:jnr-posix:3.0.54 - {{\field{\*\fldinst{HYPERLINK http://nexus.sonatype.org/oss-repository-hosting.html/jnr-posix }}{\fldrslt{http://nexus.sonatype.org/oss-repository-hosting.html/jnr-posix\ul0\cf0}}}}\f0\fs16 )\par
+\tab GPLv2:\par
+\tab\tab - jnr-posix (com.github.jnr:jnr-posix:3.0.54 - {{\field{\*\fldinst{HYPERLINK http://nexus.sonatype.org/oss-repository-hosting.html/jnr-posix }}{\fldrslt{http://nexus.sonatype.org/oss-repository-hosting.html/jnr-posix\ul0\cf0}}}}\f0\fs16 )\par
+\tab GPLv2+CE:\par
+\tab\tab - Java Servlet API (javax.servlet:javax.servlet-api:3.1.0 - {{\field{\*\fldinst{HYPERLINK http://servlet-spec.java.net }}{\fldrslt{http://servlet-spec.java.net\ul0\cf0}}}}\f0\fs16 )\par
+\tab\tab - javafx-base (org.openjfx:javafx-base:14 - {{\field{\*\fldinst{HYPERLINK https://openjdk.java.net/projects/openjfx/javafx-base/ }}{\fldrslt{https://openjdk.java.net/projects/openjfx/javafx-base/\ul0\cf0}}}}\f0\fs16 )\par
+\tab\tab - javafx-controls (org.openjfx:javafx-controls:14 - {{\field{\*\fldinst{HYPERLINK https://openjdk.java.net/projects/openjfx/javafx-controls/ }}{\fldrslt{https://openjdk.java.net/projects/openjfx/javafx-controls/\ul0\cf0}}}}\f0\fs16 )\par
+\tab\tab - javafx-fxml (org.openjfx:javafx-fxml:14 - {{\field{\*\fldinst{HYPERLINK https://openjdk.java.net/projects/openjfx/javafx-fxml/ }}{\fldrslt{https://openjdk.java.net/projects/openjfx/javafx-fxml/\ul0\cf0}}}}\f0\fs16 )\par
+\tab\tab - javafx-graphics (org.openjfx:javafx-graphics:14 - {{\field{\*\fldinst{HYPERLINK https://openjdk.java.net/projects/openjfx/javafx-graphics/ }}{\fldrslt{https://openjdk.java.net/projects/openjfx/javafx-graphics/\ul0\cf0}}}}\f0\fs16 )\par
+\tab LGPL 2.1:\par
+\tab\tab - dbus-java (com.github.hypfvieh:dbus-java:3.0.2 - {{\field{\*\fldinst{HYPERLINK https://github.com/hypfvieh/dbus-java/dbus-java }}{\fldrslt{https://github.com/hypfvieh/dbus-java/dbus-java\ul0\cf0}}}}\f0\fs16 )\par
+\tab\tab - jnr-posix (com.github.jnr:jnr-posix:3.0.54 - {{\field{\*\fldinst{HYPERLINK http://nexus.sonatype.org/oss-repository-hosting.html/jnr-posix }}{\fldrslt{http://nexus.sonatype.org/oss-repository-hosting.html/jnr-posix\ul0\cf0}}}}\f0\fs16 )\par
+\tab\tab - Java Native Access (net.java.dev.jna:jna:5.1.0 - {{\field{\*\fldinst{HYPERLINK https://github.com/java-native-access/jna }}{\fldrslt{https://github.com/java-native-access/jna\ul0\cf0}}}}\f0\fs16 )\par
+\tab\tab - Java Native Access Platform (net.java.dev.jna:jna-platform:5.1.0 - {{\field{\*\fldinst{HYPERLINK https://github.com/java-native-access/jna }}{\fldrslt{https://github.com/java-native-access/jna\ul0\cf0}}}}\f0\fs16 )\par
+\tab MIT License:\par
+\tab\tab - java jwt (com.auth0:java-jwt:3.10.2 - {{\field{\*\fldinst{HYPERLINK https://github.com/auth0/java-jwt }}{\fldrslt{https://github.com/auth0/java-jwt\ul0\cf0}}}}\f0\fs16 )\par
+\tab\tab - java-utils (com.github.hypfvieh:java-utils:1.0.5 - {{\field{\*\fldinst{HYPERLINK https://github.com/hypfvieh/java-utils }}{\fldrslt{https://github.com/hypfvieh/java-utils\ul0\cf0}}}}\f0\fs16 )\par
+\tab\tab - jnr-x86asm (com.github.jnr:jnr-x86asm:1.0.2 - {{\field{\*\fldinst{HYPERLINK http://github.com/jnr/jnr-x86asm }}{\fldrslt{http://github.com/jnr/jnr-x86asm\ul0\cf0}}}}\f0\fs16 )\par
+\tab\tab - jnr-fuse (com.github.serceman:jnr-fuse:0.5.4 - no url defined)\par
+\tab\tab - zxcvbn4j (com.nulab-inc:zxcvbn:1.3.0 - {{\field{\*\fldinst{HYPERLINK https://github.com/nulab/zxcvbn4j }}{\fldrslt{https://github.com/nulab/zxcvbn4j\ul0\cf0}}}}\f0\fs16 )\par
+\tab\tab - secret-service (de.swiesend:secret-service:1.0.0-RC.3 - {{\field{\*\fldinst{HYPERLINK https://github.com/swiesend/secret-service }}{\fldrslt{https://github.com/swiesend/secret-service\ul0\cf0}}}}\f0\fs16 )\par
+\tab\tab - Checker Qual (org.checkerframework:checker-qual:2.10.0 - {{\field{\*\fldinst{HYPERLINK https://checkerframework.org }}{\fldrslt{https://checkerframework.org\ul0\cf0}}}}\f0\fs16 )\par
+\tab\tab - SLF4J API Module (org.slf4j:slf4j-api:1.7.30 - {{\field{\*\fldinst{HYPERLINK http://www.slf4j.org }}{\fldrslt{http://www.slf4j.org\ul0\cf0}}}}\f0\fs16 )\par
+\tab The BSD 2-Clause License:\par
+\tab\tab - EasyBind (org.fxmisc.easybind:easybind:1.0.3 - {{\field{\*\fldinst{HYPERLINK http://www.fxmisc.org/easybind/ }}{\fldrslt{http://www.fxmisc.org/easybind/\ul0\cf0}}}}\f0\fs16 )\par
+\par
+\b Cryptomator uses other third-party assets under the following licenses:\b0\par
+\tab SIL OFL 1.1 License:\par
+\tab\tab - Font Awesome 5.12.0 ({{\field{\*\fldinst{HYPERLINK https://fontawesome.com/ }}{\fldrslt{https://fontawesome.com/\ul0\cf0}}}}\f0\fs16 )\par
+\par
+}
+

+ 134 - 0
dist/win/resources/main.wxs

@@ -0,0 +1,134 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Cryptomator's Jpackage Wix installer file 
+    
+    Remark: Expressions like $(var.name) are preprocessor variables, see also https://wixtoolset.org/documentation/manual/v3/overview/preprocessor.html
+-->
+<Wix xmlns="http://schemas.microsoft.com/wix/2006/wi"
+  xmlns:util="http://schemas.microsoft.com/wix/UtilExtension">
+
+  <?ifdef JpIsSystemWide ?>
+  <?define JpInstallScope="perMachine"?>
+  <?else?>
+  <?define JpInstallScope="perUser"?>
+  <?endif?>
+
+  <?define JpProductLanguage=1033 ?>
+  <?define JpInstallerVersion=200 ?>
+  <?define JpCompressedMsi=yes ?>
+
+  <?ifdef JpAllowUpgrades ?>
+  <?define JpUpgradeVersionOnlyDetectUpgrade="no"?>
+  <?else?>
+  <?define JpUpgradeVersionOnlyDetectUpgrade="yes"?>
+  <?endif?>
+  <?ifdef JpAllowDowngrades ?>
+  <?define JpUpgradeVersionOnlyDetectDowngrade="no"?>
+  <?else?>
+  <?define JpUpgradeVersionOnlyDetectDowngrade="yes"?>
+  <?endif?>
+
+  <?include $(var.JpConfigDir)/overrides.wxi ?>
+
+  <Product Id="$(var.JpProductCode)" Name="$(var.JpAppName)" Language="$(var.JpProductLanguage)" Version="$(var.JpAppVersion)" Manufacturer="$(var.JpAppVendor)" UpgradeCode="$(var.JpProductUpgradeCode)">
+
+    <Package Description="$(var.JpAppDescription)" Manufacturer="$(var.JpAppVendor)" InstallerVersion="$(var.JpInstallerVersion)" Compressed="$(var.JpCompressedMsi)" InstallScope="$(var.JpInstallScope)" Platform="x64" />
+
+    <Media Id="1" Cabinet="Data.cab" EmbedCab="yes" />
+
+    <Upgrade Id="$(var.JpProductUpgradeCode)">
+      <UpgradeVersion OnlyDetect="$(var.JpUpgradeVersionOnlyDetectUpgrade)" Property="JP_UPGRADABLE_FOUND" Maximum="$(var.JpAppVersion)" MigrateFeatures="yes" IncludeMaximum="$(var.JpUpgradeVersionOnlyDetectUpgrade)" />
+      <UpgradeVersion OnlyDetect="$(var.JpUpgradeVersionOnlyDetectDowngrade)" Property="JP_DOWNGRADABLE_FOUND" Minimum="$(var.JpAppVersion)" MigrateFeatures="yes" IncludeMinimum="$(var.JpUpgradeVersionOnlyDetectDowngrade)" />
+    </Upgrade>
+
+    <?ifndef JpAllowUpgrades ?>
+    <CustomAction Id="JpDisallowUpgrade" Error="!(loc.DisallowUpgradeErrorMessage)" />
+    <?endif?>
+    <?ifndef JpAllowDowngrades ?>
+    <CustomAction Id="JpDisallowDowngrade" Error="!(loc.DowngradeErrorMessage)" />
+    <?endif?>
+
+    <!-- Standard required root -->
+    <Directory Id="TARGETDIR" Name="SourceDir"/>
+
+    <Feature Id="DefaultFeature" Title="!(loc.MainFeatureTitle)" Level="1">
+      <ComponentGroupRef Id="Shortcuts"/>
+      <ComponentGroupRef Id="Files"/>
+      <ComponentGroupRef Id="FileAssociations"/>
+    </Feature>
+
+    <?ifdef JpInstallDirChooser ?>
+    <Binary Id="JpCaDll" SourceFile="wixhelper.dll"/>
+    <CustomAction Id="JpCheckInstallDir" BinaryKey="JpCaDll" DllEntry="CheckInstallDir" />
+    <?endif?>
+
+    <CustomAction Id="JpSetARPINSTALLLOCATION" Property="ARPINSTALLLOCATION" Value="[INSTALLDIR]" />
+
+    <?ifdef JpIcon ?>
+    <Property Id="ARPPRODUCTICON" Value="JpARPPRODUCTICON"/>
+    <Icon Id="JpARPPRODUCTICON" SourceFile="$(var.JpIcon)"/>
+    <?endif?>
+
+    <UI>
+      <?ifdef JpInstallDirChooser ?>
+      <Dialog Id="JpInvalidInstallDir" Width="300" Height="85" Title="[ProductName] Setup" NoMinimize="yes">
+        <Control Id="JpInvalidInstallDirYes" Type="PushButton" X="100" Y="55" Width="50" Height="15" Default="no" Cancel="no" Text="Yes">
+          <Publish Event="NewDialog" Value="VerifyReadyDlg">1</Publish>
+        </Control>
+        <Control Id="JpInvalidInstallDirNo" Type="PushButton" X="150" Y="55" Width="50" Height="15" Default="yes" Cancel="yes" Text="No">
+          <Publish Event="NewDialog" Value="InstallDirDlg">1</Publish>
+        </Control>
+        <Control Id="Text" Type="Text" X="25" Y="15" Width="250" Height="30" TabSkip="no">
+          <Text>!(loc.message.install.dir.exist)</Text>
+        </Control>
+      </Dialog>
+
+      <!--
+        Run WixUI_InstallDir dialog in the default install directory.
+      -->
+      <Property Id="WIXUI_INSTALLDIR" Value="INSTALLDIR"/>
+      <UIRef Id="CustomWizard" />
+
+      <Publish Dialog="InstallDirDlg" Control="Next" Event="DoAction" Value="JpCheckInstallDir" Order="3">1</Publish>
+      <Publish Dialog="InstallDirDlg" Control="Next" Event="NewDialog" Value="JpInvalidInstallDir" Order="5">INSTALLDIR_VALID="0"</Publish>
+      <Publish Dialog="InstallDirDlg" Control="Next" Event="NewDialog" Value="VerifyReadyDlg" Order="5">INSTALLDIR_VALID="1"</Publish>
+
+      <?ifndef JpLicenseRtf ?>
+      <!--
+        No license file provided.
+        Override the dialog sequence in built-in dialog set "WixUI_InstallDir"
+        to exclude license dialog.
+      -->
+      <Publish Dialog="WelcomeDlg" Control="Next" Event="NewDialog" Value="InstallDirDlg" Order="2">1</Publish>
+      <Publish Dialog="InstallDirDlg" Control="Back" Event="NewDialog" Value="WelcomeDlg" Order="2">1</Publish>
+      <?endif?>
+
+      <?else?>
+
+      <?ifdef JpLicenseRtf ?>
+      <UIRef Id="WixUI_Minimal" />
+      <?endif?>
+
+      <?endif?>
+    </UI>
+
+    <?ifdef JpLicenseRtf ?>
+    <WixVariable Id="WixUILicenseRtf" Value="$(var.JpLicenseRtf)"/>
+    <?endif?>
+
+    <InstallExecuteSequence>
+      <Custom Action="JpSetARPINSTALLLOCATION" After="CostFinalize">Not Installed</Custom>
+      <?ifndef JpAllowUpgrades ?>
+      <Custom Action="JpDisallowUpgrade" After="FindRelatedProducts">JP_UPGRADABLE_FOUND</Custom>
+      <?endif?>
+      <?ifndef JpAllowDowngrades ?>
+      <Custom Action="JpDisallowDowngrade" After="FindRelatedProducts">JP_DOWNGRADABLE_FOUND</Custom>
+      <?endif?>
+      <RemoveExistingProducts Before="CostInitialize"/>
+    </InstallExecuteSequence>
+
+    <WixVariable Id="WixUIBannerBmp" Value="$(env.JpackageWixWizardResources)\banner.bmp" />
+    <WixVariable Id="WixUIDialogBmp" Value="$(env.JpackageWixWizardResources)\background.bmp" />
+  </Product>
+
+  <?include $(env.JpackageWixWizardResources)\customWizard.wxi ?>
+</Wix>