The Bench system consists of a file system layout, binaries for
Core Library, Command Line Interface, and Dashboard,
a couple of PowerShell/CMD scripts,
the app libraries, and the configuration.
Since the architecture is constantly evolving until Bench hits the version 1.0
this article contains only a brief description of the current state.
Bench is installed and upgraded with a bootstrap file, which downloads
Bench.zip 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.
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.
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.
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
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
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.
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.