Tech Guides

How does it work?


Bench Setup and Upgrade

Bench is installed and upgraded with a bootstrap file, which downloads the archive with the Bench system files, extracts its content in the Bench root directory, and starts the Bench CLI with the initialization mode and the setup mode. The custom configuration is left untouched if it already exists; otherwise it can be initialized from a template or from a Git repository.

App Setup and Upgrade

An app in Bench is installed according to its typ. Default apps are installed by downloading their app resource file/archive extracting or copying it into the apps target directory. Meta apps are installed completely via custom scripts or they just serve as groups for other apps via their dependencies. Package apps are installed via their package manager. Custom scripts can extend or override different steps of the setup process.

Isolation and Portability

Bench provides multiple mechanisms to isolate Bench apps from the Windows system and the current Windows user profile, and vice versa. The most important technique is to change the environment variables when starting programs. Additionally it supports running a pre- and post-execution script for programs, called execution adornment, which is used by Bench itself, to provide Windows registry isolation.

App Activation

Seleting an app for installation by Bench is called activating the app. Apps can be activated explicitly by the user, or they can be activated implicitly because they are required by Bench or another app. An activated app can be explicitly deactivated by the user. The activation and deactivation of apps is stored in two simple text files.


The isolated environment of Bench is available either via starting an app or starting a Bench shell respectively. Like apps, shells can be started with a launcher. Additionally, shells can be started from the toolbar in the main window of the Bench Dashboard. Bench supports three shells: Windows Command Prompt (CMD), PowerShell, and Bash. Overview Environment Quick Access Drag & Drop Launching Shell Entry Points Loading the Bench Environment with Hindsight Environment When a Bench shell is started, the environment variables for the shell process are modified according to the isolation settings of Bench.


To start a Bench app or shell, launchers are provided. Launchers appear in two different forms: A shortcut in the launcher directory, and an icon in the Bench Dashboard main window. Additionally to start them by double click, dragging a file onto a launcher, starts the linked app or shell and passes the path of the dropped file as a command line parameter to the app or shell. Usually this means, the app opens and the shell executes the dropped file.


Every setup process in Bench is logged into a text file in log. The log file contains messages about every setup step, occuring errors, including stack traces from the Bench core binary, and the output of called command line tools. During the development of custom setup scripts or incase a setup process failes for some reason, analyzing the last log file can be very informative.

ConEmu Integration

The setup dialog of the dashboard contains a console panel at the bottom. This console panel shows an embedded ConEmu console. When command line tools are called during the setup process, thier output is visible inside of this console.