From 72de53c0c0f533bef3131c66ddccdde700438b31 Mon Sep 17 00:00:00 2001 From: Micah Lee Date: Thu, 20 Feb 2020 11:37:24 -0800 Subject: [PATCH 1/5] Begin making a WiX msi installer --- .gitignore | 5 +- BUILD.md | 5 +- install/windows/Dangerzone.wxs | 246 +++++++++++++++++++++++++++++ install/windows/dangerzone.ico | Bin 0 -> 67646 bytes install/windows/make_installer.bat | 3 + 5 files changed, 256 insertions(+), 3 deletions(-) create mode 100644 install/windows/Dangerzone.wxs create mode 100644 install/windows/dangerzone.ico create mode 100644 install/windows/make_installer.bat diff --git a/.gitignore b/.gitignore index 0302e4b..9237339 100644 --- a/.gitignore +++ b/.gitignore @@ -131,4 +131,7 @@ dmypy.json .vscode *.tar.gz deb_dist -.DS_Store \ No newline at end of file +.DS_Store +install/windows/Dangerzone.msi +install/windows/Dangerzone.wixobj +install/windows/Dangerzone.wixpdb \ No newline at end of file diff --git a/BUILD.md b/BUILD.md index a042f27..3124f57 100644 --- a/BUILD.md +++ b/BUILD.md @@ -157,8 +157,9 @@ Now the next time you use PyInstaller to build dangerzone, the `.exe` file shoul ### If you want to build the installer -* Go to http://nsis.sourceforge.net/Download and download the latest NSIS. I downloaded `nsis-3.05-setup.exe`. -* Add `C:\Program Files (x86)\NSIS` to the path. +* Go to https://dotnet.microsoft.com/download/dotnet-framework and download and install .NET Framework 3.5 SP1 Runtime. I downloaded `dotnetfx35.exe`. +* Go to https://wixtoolset.org/releases/ and download and install WiX toolset. I downloaded `wix311.exe`. +* Add `C:\Program Files (x86)\WiX Toolset v3.1.1\bin` to the path. ### If you want to sign binaries with Authenticode diff --git a/install/windows/Dangerzone.wxs b/install/windows/Dangerzone.wxs new file mode 100644 index 0000000..eb8417b --- /dev/null +++ b/install/windows/Dangerzone.wxs @@ -0,0 +1,246 @@ + + + + + + + + + + + + + + + + + + + + NOT NEWERVERSIONDETECTED + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/install/windows/dangerzone.ico b/install/windows/dangerzone.ico new file mode 100644 index 0000000000000000000000000000000000000000..e89af0d20305ab3079bc00be978a5c885cfbd0b8 GIT binary patch literal 67646 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 G*#7~xlB`4k literal 0 HcmV?d00001 diff --git a/install/windows/make_installer.bat b/install/windows/make_installer.bat new file mode 100644 index 0000000..d5487ad --- /dev/null +++ b/install/windows/make_installer.bat @@ -0,0 +1,3 @@ +candle Dangerzone.wxs +light Dangerzone.wixobj +@pause \ No newline at end of file From 2ae39db1c1c1054beefb82e21964393a5be6a086 Mon Sep 17 00:00:00 2001 From: Micah Lee Date: Thu, 20 Feb 2020 11:51:06 -0800 Subject: [PATCH 2/5] Improve make_installer.bat script so that it works in the build dir, and outputs into the dist dir --- .gitignore | 5 +---- install/pyinstaller/pyinstaller.spec | 6 ++++++ install/windows/Dangerzone.wxs | 2 +- install/windows/make_installer.bat | 24 +++++++++++++++++++++--- 4 files changed, 29 insertions(+), 8 deletions(-) diff --git a/.gitignore b/.gitignore index 9237339..0302e4b 100644 --- a/.gitignore +++ b/.gitignore @@ -131,7 +131,4 @@ dmypy.json .vscode *.tar.gz deb_dist -.DS_Store -install/windows/Dangerzone.msi -install/windows/Dangerzone.wixobj -install/windows/Dangerzone.wixpdb \ No newline at end of file +.DS_Store \ No newline at end of file diff --git a/install/pyinstaller/pyinstaller.spec b/install/pyinstaller/pyinstaller.spec index 41944fa..4b14d42 100644 --- a/install/pyinstaller/pyinstaller.spec +++ b/install/pyinstaller/pyinstaller.spec @@ -23,6 +23,11 @@ if p == "Darwin": else: datas = [("../../share", "share")] +if p == "Windows": + icon = os.path.join(root, "install", "windows", "dangerzone.ico") +else: + icon = None + a = Analysis( ["dangerzone"], pathex=["."], @@ -48,6 +53,7 @@ exe = EXE( strip=False, upx=True, console=False, + icon=icon, ) coll = COLLECT( diff --git a/install/windows/Dangerzone.wxs b/install/windows/Dangerzone.wxs index eb8417b..fff47d3 100644 --- a/install/windows/Dangerzone.wxs +++ b/install/windows/Dangerzone.wxs @@ -6,7 +6,7 @@ - + diff --git a/install/windows/make_installer.bat b/install/windows/make_installer.bat index d5487ad..34814c1 100644 --- a/install/windows/make_installer.bat +++ b/install/windows/make_installer.bat @@ -1,3 +1,21 @@ -candle Dangerzone.wxs -light Dangerzone.wixobj -@pause \ No newline at end of file +REM delete old dist and build files +rmdir /s /q dist +rmdir /s /q build + +REM build the exe with pyinstaller +pyinstaller install\pyinstaller\pyinstaller.spec + +REM TODO: code sign dangerzone.exe + +REM build the msi package +cd build +mkdir wix +cd wix +candle.exe ..\..\install\windows\Dangerzone.wxs +light.exe -ext WixUIExtension Dangerzone.wixobj + +REM TODO: code sign dangerzone.msi + +REM moving dangerzone.msi to dist +cd ..\.. +move build/wix/Dangerzone.msi dist From e796f9aaea51f87b2632c62ae23c2203da295992 Mon Sep 17 00:00:00 2001 From: Micah Lee Date: Thu, 20 Feb 2020 12:23:39 -0800 Subject: [PATCH 3/5] Finished making a nice WiX installer, but still missing codesigning --- install/windows/Dangerzone.wxs | 5 +++-- install/windows/dialog.bmp | Bin 0 -> 615402 bytes install/windows/license.rtf | Bin 0 -> 1371 bytes install/windows/make_installer.bat | 2 +- 4 files changed, 4 insertions(+), 3 deletions(-) create mode 100644 install/windows/dialog.bmp create mode 100755 install/windows/license.rtf diff --git a/install/windows/Dangerzone.wxs b/install/windows/Dangerzone.wxs index fff47d3..d6f855b 100644 --- a/install/windows/Dangerzone.wxs +++ b/install/windows/Dangerzone.wxs @@ -10,8 +10,9 @@ - - + + + diff --git a/install/windows/dialog.bmp b/install/windows/dialog.bmp new file mode 100644 index 0000000000000000000000000000000000000000..75d2651d7243db3abcde23738d74bf8b2fd27d21 GIT binary patch literal 615402 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 jHkj>mGE4L literal 0 HcmV?d00001 diff --git a/install/windows/license.rtf b/install/windows/license.rtf new file mode 100755 index 0000000000000000000000000000000000000000..f31674a6d0ae62e61c65f92f62a85a1553b33cc5 GIT binary patch literal 1371 zcmZ8hOK;ma5bn7^|HB}sb|Iv)v)g_2q}X&!RF(`%ZZ?1}ltfu*7l3Q8xN;6Plg=hj^kKiO-uSW+)SZ8G8F(PbghOzY;UXKTPkQ0L+4=LCw#VF{E z;GkRCo$*@)TgR~;r0pYUrH8IZhhD8OhDgIwKI3JuVi-JvMBTybf9fua!+bCs`t9gj_Z|9oe3v{u=L62o1S0Vqbc-gbv5rI$XZQ{EylM&i`Azo;0ip6#1&W zPZ$AOz?S9T>5?qrDk<>&DuR1juJc_9*uj#le1LofN%jEWXts=i{JmwQC?ID*H`|mF ztkG2&#Ih05^K~aKpE7%aWSR-&gu!;lws}F2eu=Od%~lLq$cAL)HL_w2$aj2!Vx6REph|YAo&|l2eEY!Y-MWNz zo-PR%ZwV?(Zc}ohLQ{)0p_>Sn$tJn;>KNoGn1!}U-Tj(`67nVZS(G%-yp2Vkl?-1a zbjixM(R*5u2ogpMAIOU32=C*>37=W!=Q46Z@lglWZyUiDAJ`5}ziC;LBtJ literal 0 HcmV?d00001 diff --git a/install/windows/make_installer.bat b/install/windows/make_installer.bat index 34814c1..fe60330 100644 --- a/install/windows/make_installer.bat +++ b/install/windows/make_installer.bat @@ -18,4 +18,4 @@ REM TODO: code sign dangerzone.msi REM moving dangerzone.msi to dist cd ..\.. -move build/wix/Dangerzone.msi dist +move build\wix\Dangerzone.msi dist From 264429f313ea3384f408376d71091332a62c5599 Mon Sep 17 00:00:00 2001 From: Micah Lee Date: Thu, 20 Feb 2020 12:26:24 -0800 Subject: [PATCH 4/5] Call the Windows build script build.bat, and update build instructions --- BUILD.md | 6 +++--- install/windows/{make_installer.bat => build.bat} | 0 2 files changed, 3 insertions(+), 3 deletions(-) rename install/windows/{make_installer.bat => build.bat} (100%) diff --git a/BUILD.md b/BUILD.md index 3124f57..cef74da 100644 --- a/BUILD.md +++ b/BUILD.md @@ -178,12 +178,12 @@ poetry run pyinstaller install\pyinstaller\pyinstaller.spec ### To build the installer -Note that you must have a codesigning certificate installed in order to use the `install\windows\build_exe.bat` script, because it codesigns `dangerzone.exe`, `uninstall.exe`, and `dangerzone-setup.exe`. +Note that you must have a codesigning certificate installed in order to use the `install\windows\build.bat` script, because it codesigns `dangerzone.exe` and `Dangerzone.msi`. Open a command prompt, cd to the dangerzone directory, and run: ``` -poetry run install\build_exe.bat +poetry run install\windows\build.bat ``` -This will prompt you to codesign three binaries and execute one unsigned binary. When you're done clicking through everything you will have `dist\dangerzone-setup.exe`. \ No newline at end of file +When you're done you will have `dist\Dangerzone.msi`. \ No newline at end of file diff --git a/install/windows/make_installer.bat b/install/windows/build.bat similarity index 100% rename from install/windows/make_installer.bat rename to install/windows/build.bat From 5747f338dc751a47cdaf0b2f3568af0e11733d14 Mon Sep 17 00:00:00 2001 From: Micah Lee Date: Thu, 20 Feb 2020 12:31:57 -0800 Subject: [PATCH 5/5] Make sure to pass startupinfo into all subprocesses that are run in windows --- dangerzone/settings_widget.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/dangerzone/settings_widget.py b/dangerzone/settings_widget.py index a4f7700..c44c7b9 100644 --- a/dangerzone/settings_widget.py +++ b/dangerzone/settings_widget.py @@ -114,7 +114,8 @@ class SettingsWidget(QtWidgets.QWidget): # Is update containers required? output = subprocess.check_output( - [self.common.container_runtime, "image", "ls", "dangerzone"] + [self.common.container_runtime, "image", "ls", "dangerzone"], + startupinfo=self.common.get_subprocess_startupinfo(), ) if b"dangerzone" not in output: self.update_checkbox.setCheckState(QtCore.Qt.Checked)