5.8. Windows Build¶
Each release of King Phisher includes an MSI build of the client for easy use on Windows systems. Creating this build is one of the last steps prior to creating a new version release. The build is created using the Python cx_Freeze package.
Before the build can be created the PyGObject for Windows package must be installed. While installing this package, it prompts for which GNOME libraries are to be included. When the prompt appears the following packages should be selected.
- Base packages
- ATK
- GConf
- GDK-Pixbuf
- GTK+
- GTKSourceView
- GXML
- Pango
- Soup
- WebkitGTK
Once all packages have been installed and the King Phisher client is running with Python, the “tools/development/build_msi.bat” script can be executed to create the build. The build process will take a few minutes, but once completed an MSI installer file will be created in a new “dist” directory in the projects root folder.
5.8.1. Version Information¶
After building the MSI file, the custom properties will need to be added. These are added by right clicking on the MSI file, selecting properties, and then the custom tab where custom fields can be created. These need to include the Python version, and PyGI-AIO version utilized in making the build as text entries. Below is the name fields and example values.
Name | Example Value |
---|---|
Python Version | 3.4.4rc1 |
PyGI-AIO Version | 3.24.1 rev1 |
gi.repository GLib | 2.52.1 |
gi.repository GObject | 3.24.1 |
gi.repository GTK | 3.18.9 |
5.8.2. Python 3.4 Build¶
As of King Phisher v1.8.0, the Windows client is built with Python
3.4. To install basemaps for Python 3.4 geos will need to be compiled for
Windows. In addition to the packages in the “requirements.txt” file,
pypiwin32api
, and numpy
will need to be installed manually.
For information on how to build geos on Windows with CMake visit: https://trac.osgeo.org/geos/wiki/BuildingOnWindowsWithCMake.
It is important that the same version of geos be built that is used with basemaps.
Once geos is complied the two generated DLLs geos.dll
and geos_c.dll
need to be copied to “[python34]libssite-packages”.
Note
C++ 2010 Express and older will need to have the floor
and ceil
functions defined. These two functions are required by the geos library but
are unavailable in older versions of the standard library.
5.8.3. CX Freeze version 5.0.1¶
After building and installing the MSI file, if the short cut link fails because
it cannot from . import xxx
, it is because the working directory for the
shortcut is not set. To change this so builds have the working directory set
automatically, the last line of
“[python34]Libsite-packagescx_Freezewindist.py” needs to be updated from
None
to "TARGETDIR"
.
The ouput example of lines 52-62 of cx_freeze’s “windist.py” file, with change applied.
for index, executable in enumerate(self.distribution.executables):
if executable.shortcutName is not None \
and executable.shortcutDir is not None:
baseName = os.path.basename(executable.targetName)
msilib.add_data(self.db, "Shortcut",
[("S_APP_%s" % index, executable.shortcutDir,
executable.shortcutName, "TARGETDIR",
"[TARGETDIR]%s" % baseName, None, None, None,
None, None, None, "TARGETDIR")])