diff --git a/BUILD.md b/BUILD.md index 037286c..7885d8f 100644 --- a/BUILD.md +++ b/BUILD.md @@ -152,21 +152,21 @@ Dangerzone uses PyInstaller to turn the python source code into Windows executab Here's how to compile the PyInstaller bootloader: -Download and install [Microsoft Build Tools for Visual Studio 2019](https://www.visualstudio.com/downloads/#build-tools-for-visual-studio-2019). I downloaded `vs_buildtools__719988613.1603831511.exe`. In the installer, check the box next to "C++ build tools". Click "Individual components", and under "Compilers, build tools and runtimes", check "Windows Universal CRT SDK". Then click install. When installation is done, you may have to reboot your computer. +Download and install [Microsoft Build Tools for Visual Studio 2022](https://visualstudio.microsoft.com/downloads/#build-tools-for-visual-studio-2022). I downloaded `vs_BuildTools.exe`. In the installer, check the box next to "Desktop development with C++". Click "Individual components", and under "Compilers, build tools and runtimes", check "Windows Universal CRT SDK". Then click install. When installation is done, you may have to reboot your computer. Then, enable the 32-bit Visual C++ Toolset on the Command Line like this: ``` -cd "C:\Program Files (x86)\Microsoft Visual Studio\2019\BuildTools\VC\Auxiliary\Build" -vcvars32.bat +cd 'C:\Program Files (x86)\Microsoft Visual Studio\2022\BuildTools\VC\Auxiliary\Build' +.\vcvars32.bat ``` -Change to a folder where you keep source code, and clone the PyInstaller git repo and checkout the `v4.3` tag: +Change to a folder where you keep source code, and clone the PyInstaller git repo and checkout the `v4.7` tag: ``` git clone https://github.com/pyinstaller/pyinstaller.git cd pyinstaller -git checkout v4.3 +git checkout v4.7 ``` The next step is to compile the bootloader. We should do this all in dangerzone's poetry shell: @@ -180,7 +180,7 @@ cd ..\pyinstaller Then, compile the bootloader: ``` -cd bootloader +cd .\bootloader\ python waf distclean all --target-arch=32bit --msvc_targets=x86 cd .. ``` @@ -202,8 +202,7 @@ Now the next time you use PyInstaller to build dangerzone, the `.exe` file shoul ### If you want to sign binaries with Authenticode -* You'll need a code signing certificate. I got an open source code signing certificate from [Certum](https://www.certum.eu/certum/cert,offer_en_open_source_cs.xml). -* Once you get a code signing key and certificate and covert it to a pfx file, import it into your certificate store. +You'll need a code signing certificate. ## To make a .exe @@ -224,24 +223,10 @@ mklink dangerzone-container.exe dangerzone.exe ### To build the installer -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: +Note that you must have a codesigning certificate installed in order to use the `install\windows\build-app.bat` script, because it codesigns `dangerzone.exe` and `Dangerzone.msi`. ``` -poetry run install\windows\step1-build-exe.bat -``` - -Open a second command prompt _as an administratror_, cd to the dangerzone directory, and run: - -``` -install\windows\step2-make-symlink.bat -``` - -Then back in the first command prompt, run: - -``` -poetry run install\windows\step3-build-installer.bat +poetry run .\install\windows\build-app.bat ``` When you're done you will have `dist\Dangerzone.msi`. diff --git a/dangerzone/global_common.py b/dangerzone/global_common.py index e3cea96..438dd56 100644 --- a/dangerzone/global_common.py +++ b/dangerzone/global_common.py @@ -430,7 +430,9 @@ class GlobalCommon(object): print("Installing Dangerzone container image...") p = subprocess.Popen( - [self.get_container_runtime(), "load"], stdin=subprocess.PIPE + [self.get_container_runtime(), "load"], + stdin=subprocess.PIPE, + startupinfo=self.get_subprocess_startupinfo(), ) chunk_size = 1024 @@ -473,6 +475,7 @@ class GlobalCommon(object): self.container_name, ], text=True, + startupinfo=self.get_subprocess_startupinfo(), ) found_image_id = found_image_id.strip() @@ -484,7 +487,8 @@ class GlobalCommon(object): print(f"Deleting old dangerzone container image") subprocess.check_output( - [self.get_container_runtime(), "rmi", found_image_id] + [self.get_container_runtime(), "rmi", found_image_id], + startupinfo=self.get_subprocess_startupinfo(), ) return installed diff --git a/dangerzone/gui/main_window.py b/dangerzone/gui/main_window.py index 3cea9d0..5cb04d2 100644 --- a/dangerzone/gui/main_window.py +++ b/dangerzone/gui/main_window.py @@ -512,7 +512,9 @@ class ConvertThread(QtCore.QThread): except: print(f"Invalid JSON returned from container: {line}") self.error = True - self.update.emit(True, "Invalid JSON returned from container", 0) + self.update.emit( + True, f"Invalid JSON returned from container:\n\n{line}", 0 + ) return s = Style.BRIGHT + Fore.CYAN + f"{status['percentage']}% " diff --git a/install/windows/build-app.bat b/install/windows/build-app.bat new file mode 100644 index 0000000..a2df1d1 --- /dev/null +++ b/install/windows/build-app.bat @@ -0,0 +1,26 @@ +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 code sign dangerzone.exe +signtool.exe sign /v /d "Dangerzone" /sha1 28a4af3b6ba5ed0ef307e1b96a140e1b42450c3b /tr http://timestamp.digicert.com dist\dangerzone\dangerzone.exe + +REM build the wix file +python install\windows\build-wxs.py > install\windows\Dangerzone.wxs + +REM build the msi package +cd build +mkdir wix +cd wix +candle.exe ..\..\install\windows\Dangerzone.wxs +light.exe -ext WixUIExtension Dangerzone.wixobj + +REM code sign dangerzone.msi +signtool.exe sign /v /d "Dangerzone" /sha1 28a4af3b6ba5ed0ef307e1b96a140e1b42450c3b /tr http://timestamp.digicert.com Dangerzone.msi + +REM moving Dangerzone.msi to dist +cd ..\.. +move build\wix\Dangerzone.msi dist diff --git a/install/windows/build-wxs.py b/install/windows/build-wxs.py index 43840e7..0f7c376 100644 --- a/install/windows/build-wxs.py +++ b/install/windows/build-wxs.py @@ -222,7 +222,6 @@ def main(): print(f'') print('') - ET.indent(root_el) ET.dump(root_el) diff --git a/install/windows/step1-build-exe.bat b/install/windows/step1-build-exe.bat deleted file mode 100644 index dacc95a..0000000 --- a/install/windows/step1-build-exe.bat +++ /dev/null @@ -1,9 +0,0 @@ -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 code sign dangerzone.exe -signtool.exe sign /v /d "Dangerzone" /a /tr http://time.certum.pl/ dist\dangerzone\dangerzone.exe diff --git a/install/windows/step2-make-symlink.bat b/install/windows/step2-make-symlink.bat deleted file mode 100644 index 1f17c58..0000000 --- a/install/windows/step2-make-symlink.bat +++ /dev/null @@ -1,4 +0,0 @@ -REM make dangerzone-container.exe symbolic link (as administrator) -cd dist\dangerzone -mklink dangerzone-container.exe dangerzone.exe -cd ..\.. \ No newline at end of file diff --git a/install/windows/step3-build-installer.bat b/install/windows/step3-build-installer.bat deleted file mode 100644 index 70463c7..0000000 --- a/install/windows/step3-build-installer.bat +++ /dev/null @@ -1,16 +0,0 @@ -REM build the wix file -python install\windows\build-wxs.py > install\windows\Dangerzone.wxs - -REM build the msi package -cd build -mkdir wix -cd wix -candle.exe ..\..\install\windows\Dangerzone.wxs -light.exe -ext WixUIExtension Dangerzone.wixobj - -REM code sign dangerzone.msi -signtool.exe sign /v /d "Dangerzone" /a /tr http://time.certum.pl/ Dangerzone.msi - -REM moving Dangerzone.msi to dist -cd ..\.. -move build\wix\Dangerzone.msi dist