forked from jahway603/hush-docs
jahway603
2 years ago
2 changed files with 102 additions and 1 deletions
@ -0,0 +1,101 @@ |
|||
# Creating SilentDragonLite MSI installer for Windows with msitools and wixl |
|||
This documentation is for creating a SilentDragonLite MSI installer for Windows using msitools and wixl. Documentation for msitools is here: https://wiki.gnome.org/msitools Documentation for wixl can refer to WiX toolset as it tries to share the same syntax: https://wixtoolset.org/documentation/manual/v3/ |
|||
This was tested on Ubuntu 20.04.4 LTS |
|||
## Install msitools and wixl |
|||
``` |
|||
sudo apt-get -y install msitools wixl |
|||
``` |
|||
## Download latest SilentDragonLite Windows release and unzip |
|||
Latest releases located here: https://git.hush.is/hush/SilentDragonLite/releases Example below is for SilentDragonLite 1.5.2 |
|||
``` |
|||
wget https://git.hush.is/attachments/37c68ff3-725c-4ceb-b28a-8c131739585c |
|||
unzip 37c68ff3-725c-4ceb-b28a-8c131739585c |
|||
``` |
|||
This will unzip into a directory named SilentDragonLite-v1.5.2-win |
|||
``` |
|||
cd SilentDragonLite-v1.5.2-win |
|||
``` |
|||
## Copy silentdragon.ico to SilentDragonLite directory |
|||
The icon file `silentdragon.ico` is currently not included in release zip, but is required to create an MSI installer with a smaller size. Setting icon SourceFile in the .wxs file to SilentDragonLite.exe will duplicate the .exe and make the installer over 100MB instead of ~80MB. How you get this .ico file is up to you. I extracted from .exe on Windows. Maybe it will be included in .zip release in the future to make this easier for anyone trying to create a MSI file for the first time. |
|||
|
|||
## Create WiX source file (.wxs) |
|||
This is an XML file. You should name it what you want the .msi file to be named IE: `SilentDragonLite-1.5.2.wxs` |
|||
Below is a copy of the contents of the `SilentDragonLite-1.5.2.wxs` file. Note that GUID's all need to be unique. This will create shortcuts to SilentDragonLite on desktop and in the start menu as well as have uninstall support from Add/Remove Programs. A tutorial that explains the basics of creating these files can be found here: https://www.firegiant.com/wix/tutorial/ |
|||
``` |
|||
<?xml version='1.0' encoding='windows-1252'?> |
|||
<Wix xmlns='http://schemas.microsoft.com/wix/2006/wi'> |
|||
<Product Name='SilentDragonLite' Id='2dc57a1d-b094-4ada-9141-c1cd4bd3ac42' UpgradeCode='d67c14a1-8cf8-438b-b32b-5e8aaae06a40' |
|||
Language='1033' Codepage='1252' Version='1.5.2' Manufacturer='HUSH'> |
|||
|
|||
<Package Id='*' Keywords='Installer' Description="HUSH SilentDragonLite Installer" |
|||
Comments='' Manufacturer='HUSH' |
|||
InstallerVersion='100' Languages='1033' Compressed='yes' SummaryCodepage='1252' /> |
|||
|
|||
<Media Id='1' Cabinet='SilentDragonLite.cab' EmbedCab='yes' DiskPrompt="CD-ROM #1" /> |
|||
<Property Id='DiskPrompt' Value="HUSH SilentDragonLite 1.5.2 Installation [1]" /> |
|||
|
|||
<Directory Id='TARGETDIR' Name='SourceDir'> |
|||
<Directory Id='ProgramFilesFolder' Name='PFiles'> |
|||
<Directory Id='HUSH' Name='HUSH'> |
|||
<Directory Id='INSTALLDIR' Name='SilentDragonLite'> |
|||
<Component Id='MainExecutable' Guid='24fb99eb-d6b6-4d96-a1b1-631acdff8222'> |
|||
<File Id='SilentDragonLiteEXE' Name='SilentDragonLite.exe' DiskId='1' Source='SilentDragonLite.exe' KeyPath='yes'> |
|||
<Shortcut Id="startmenuSilentDragonLite" Directory="ProgramMenuDir" Name="SilentDragonLite" WorkingDirectory='INSTALLDIR' Icon="SilentDragonLite.exe" IconIndex="0" Advertise="yes" /> |
|||
<Shortcut Id="desktopSilentDragonLite" Directory="DesktopFolder" Name="SilentDragonLite" WorkingDirectory='INSTALLDIR' Icon="SilentDragonLite.exe" IconIndex="0" Advertise="yes" /> |
|||
</File> |
|||
</Component> |
|||
<Component Id="READMEFILE" Guid="126d74da-bd82-496d-a936-78d6f0bf2f3c"> |
|||
<File Id="README" DiskId='1' Source="README" KeyPath="yes"/> |
|||
</Component> |
|||
</Directory> |
|||
</Directory> |
|||
</Directory> |
|||
|
|||
<Directory Id="ProgramMenuFolder" Name="Programs"> |
|||
<Directory Id="ProgramMenuDir" Name="SilentDragonLite"> |
|||
<Component Id="ProgramMenuDir" Guid="a47c750e-1dcc-49cd-bec1-d283f4b24401"> |
|||
<RemoveFolder Id='ProgramMenuDir' On='uninstall' /> |
|||
<RegistryValue Root='HKCU' Key='Software\[Manufacturer]\[ProductName]' Type='string' Value='' KeyPath='yes' /> |
|||
</Component> |
|||
</Directory> |
|||
</Directory> |
|||
|
|||
<Directory Id="DesktopFolder" Name="Desktop" /> |
|||
</Directory> |
|||
|
|||
<Feature Id='Complete' Level='1'> |
|||
<ComponentRef Id='MainExecutable' /> |
|||
<ComponentRef Id='ProgramMenuDir' /> |
|||
<ComponentRef Id='READMEFILE' /> |
|||
</Feature> |
|||
|
|||
<Icon Id="SilentDragonLite.exe" SourceFile="silentdragon.ico" /> |
|||
|
|||
</Product> |
|||
</Wix> |
|||
``` |
|||
## Build MSI file from WiX source file |
|||
``` |
|||
wixl -v SilentDragonLite-1.5.2.wxs |
|||
``` |
|||
|
|||
This will create a `SilentDragonLite-1.5.2.msi` file in the same directory which can then be distributed. If it created without error and is larger than 0kb, congratulations! |
|||
|
|||
|
|||
## Potential known issue and work-around if wixl generates MSI with corrupt cabinet file |
|||
There is a known issue where wixl may generate a corrupt cabinet file, causing the Windows installer to fail with a corrupt cabinet file error. This appears related to the file size of `SilentDragonLite.exe` and reported issue with gcab: https://gitlab.gnome.org/GNOME/gcab/-/issues/16 |
|||
|
|||
File size where this becomes an issue is not exactly known, but it has occurred when `SilentDragonLite.exe` was ~100 MB. There is no cabinet file corruption when compressing `SilentDragonLite.exe` to ~80 MB. UPX is used to compress the executable and then MSI is created again: https://upx.github.io/ |
|||
|
|||
### Install UPX ### |
|||
``` |
|||
sudo apt-get install upx |
|||
``` |
|||
### Compress SilentDragonLite.exe ### |
|||
``` |
|||
upx SilentDragonLite.exe --force |
|||
``` |
|||
### Re-create MSI using compressed exe ### |
|||
``` |
|||
wixl -v SilentDragonLite-1.5.2.wxs |
|||
``` |
Loading…
Reference in new issue