mirror of
https://github.com/status-im/status-desktop.git
synced 2025-02-15 16:18:53 +00:00
Implement a `pkg-windows` target that ultimately results in `Status.zip` being written to `pkg/`. Note: this commit does not introduce code signing for the Windows build since that piece is still a work in progress. `pkg-windows` creates a portable folder in `tmp/windows/dist` with the help of [`windeployqt`][windeployqt], which copies the needed portions of Qt into the folder. Since DLL resolution is relatively inflexible, a launcher `Status.exe` is created at the top-level of the folder; the launcher opens `bin/Status.exe` while adding the portable folder's `bin/` to the `PATH`, allowing `bin/Status.exe` to resolve the DLLs in that folder. A few additional tools need to be installed (e.g. with [scoop][scoop]) and availble in `PATH`: * 7-zip * dos2unix (provides unix2dos) * findutils * go * rcedit * wget The above list builds on the tools list in PR #521, and the other requirements and instructions in that PR's description still apply. **Why not build an installer?** When starting work on packaging for the Windows build, my initial plan was to build an installer, and for that purpose I researched the [WiX Toolset][wix], the [Qt Installer Framework][qtif], and some other options. I found that building an installer is a bit complex. I then recalled, from personal experience, that [Cmder][cmder]'s [Mini download][mini] is installer-less. You simply unzip the download and place the `cmder_mini` folder wherever you prefer. Such an approach was also recommended to me in one of the Nim language's community chats. In addition to being simpler, the installer-less approach also gives installation of Status Desktop a lower profile than an installer-application would since nothing is written to the Windows registry, added to the *Add or remove programs* list, etc. I think that's a benefit given the privacy-security focus of Status, but others may feel differently so please provide feedback on this point! [windeployqt]: https://doc.qt.io/qt-5/windows-deployment.html [scoop]: https://scoop.sh/ [wix]: https://wixtoolset.org/ [qtif]: https://doc.qt.io/qtinstallerframework/index.html [cmder]: https://cmder.net/ [mini]: https://github.com/cmderdev/cmder/releases/download/v1.3.15/cmder_mini.zip
18 lines
602 B
Nim
18 lines
602 B
Nim
from os import getCurrentDir, joinPath
|
|
from winlean import Handle, shellExecuteW
|
|
|
|
const NULL: Handle = 0
|
|
let cwd = getCurrentDir()
|
|
let workDir_str = joinPath(cwd, "bin")
|
|
let exePath_str = joinPath(workDir_str, "Status.exe")
|
|
let open_str = "open"
|
|
let params_str = ""
|
|
let workDir = newWideCString(workDir_str)
|
|
let exePath = newWideCString(exePath_str)
|
|
let open = newWideCString(open_str)
|
|
let params = newWideCString(params_str)
|
|
# SW_SHOW (5): activates window and displays it in its current size and position
|
|
const showCmd: int32 = 5
|
|
|
|
discard shellExecuteW(NULL, open, exePath, params, workDir, showCmd)
|