Skip to content

Configuration

Rod Christiansen edited this page Sep 3, 2026 · 1 revision

Configuration

csharpDialog has no configuration file. Every dialog is configured entirely by its command line and, while running, by its command file. There is no settings file, no policy ADMX, and nothing in the registry that changes how a dialog is drawn.

What follows is the complete set of paths, registry keys and environment variables the code does read or write, plus the built-in defaults, so you know what to inspect and what to clean up.

Paths

Written by csharpDialog

Path Purpose
%ProgramData%\ManagedNotifications\logs\csharpdialog.log Diagnostic log. Rolls at 5 MB, five generations kept as .1 … .5 (.1 is newest)
%ProgramData%\ManagedUtilities\logs\csharpdialog.log Legacy log location. On first write, a new build moves this file and its rotated generations to the current location so history survives the upgrade
%ProgramData%\csharpDialog\IconCache\ Icon download cache. Filenames are the first 16 hex characters of the URL's SHA-256 plus the original extension. Entries expire after 30 days by default
The --commandfile path Created with a two-line comment header if absent, along with any missing parent directories
%ProgramData%\ManagedInstalls\first_run_completed Timestamp marker, written only when a --firstrun/--autolaunch dialog closes and the directory already exists

The log location is deliberately ManagedNotifications rather than the ManagedUtilities root used by sibling tools; the dialog tools own their own root.

Read by csharpDialog

These are Cimian client paths, resolved from the standard folders rather than hardcoded drive letters. They matter only when --cimian, --firstrun or --autolaunch is used.

Path Purpose
%ProgramData%\ManagedInstalls\reports\run.log Primary log tailed by the Cimian monitor. The client truncates it at the start of each run, so it only ever holds the current run
%ProgramData%\ManagedInstalls\logs\<yyyy-MM-dd>\<HHmm>\run.log Fallback: the newest per-session log is tailed when the report log is absent
%ProgramData%\ManagedInstalls\manifests\*.yaml Scanned for managed_installs: lists to seed the dialog's list rows
%ProgramData%\ManagedInstalls\icons\ Cimian's icon cache. Checked first when resolving an icon reference by basename
%ProgramData%\ManagedInstalls\.cimian.bootstrap Present for the life of a bootstrap run; one of the first-run indicators
%ProgramFiles%\Cimian\managedsoftwareupdate.exe Started by the monitor if no managedsoftwareupdate process is already running
%USERPROFILE%\ntuser.dat Creation time is used as the profile-age first-run signal

Registry

Read

Key Value Used for
HKCU\Software\Microsoft\Windows\CurrentVersion\Themes\Personalize AppsUseLightTheme Dark mode. 0 means dark; anything else, or an unreadable key, means light
HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\OOBE OOBECompleted, OOBECompletedTime Post-OOBE detection; counts as first-run within one hour of completion
HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer FirstRun Windows first-login marker
HKCU\Software\Microsoft\Windows\CurrentVersion\RunOnce value names Any name containing FirstLogin, Welcome or Setup counts as a first-run signal
HKLM\SOFTWARE\Cimian FirstRun, InstallDate Cimian first-run marker; an install within the last two hours counts as first-run
HKCU\SOFTWARE\Cimian FirstRun Per-user Cimian first-run marker
HKLM\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters Domain Reported as DomainJoined in the detection result
HKLM\SYSTEM\CurrentControlSet\Control\CloudDomainJoin\JoinInfo subkey count Reported as AzureADJoined
HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\AAD\Storage presence Reported as WorkplaceJoined

The join status is recorded in the detection result and logged; it does not change what the dialog shows.

Written

Only when a first-run dialog completes:

Key Values
HKCU\SOFTWARE\Cimian FirstRun = 0, FirstRunCompleted = yyyy-MM-dd HH:mm:ss
HKLM\SOFTWARE\Cimian FirstRun = 0, LastUserFirstRun = yyyy-MM-dd HH:mm:ss — attempted, skipped silently without admin rights

The MSI additionally writes HKLM\Software\csharpDialog with InstallPath and Version. Nothing reads those; they are the installer's own record.

Environment variables

csharpDialog itself reads no environment variables. Two are read by the build script:

Variable Used by Meaning
SIGNING_CERT_CN build.ps1 Subject name passed to signtool /n. Falls back to a placeholder that will fail to match a certificate
SIGNTOOL_PATH / SIGNTOOL build.ps1 Path to signtool.exe, or to the directory containing it, when it is not on PATH

Defaults

The values a dialog starts with when the corresponding flag is not given:

Setting Default Where it comes from
Title empty Configuration default
Message empty Configuration default
Button 1 text OK Added automatically when no button flag is present
Window width 750 px The window's XAML (the configuration model's own 450 px default is not what dialog.exe shows)
Window height 1000 px The window's XAML
Minimum size 500 × 400 px The window's XAML
Fullscreen host cap 850 × 1200 px The overlay's XAML
Progress maximum 100 Fixed in the window's XAML; --progress-max does not change it
Progress bar visible no Turned on by --progress, --progresstext or --firstrun
List visible no Turned on by --listitem or --firstrun
Timeout none Dialog waits indefinitely
Topmost off The overlay used by --fullscreen/--kiosk is always topmost
Theme follows the system light/dark setting Registry, above
Background / text colour, font #f8f9fa / #2c3e50, Segoe UI 14 Configuration defaults; not applied by dialog.exe
Icon cache expiry 30 days IconCacheService constructor default
Icon download timeout 10 s IconCacheService
Command-file debounce 100 ms CommandFileMonitor
Cimian log poll 2 s timer plus a 500 ms change debounce CimianMonitor

The JSON configuration model

The source contains a full JSON dialog schema — title, message, buttons[], progress, listItems[], styling, behavior, and a multi-step workflow — with a parser and a validator. It is not reachable. No CLI flag loads it, and the window's config: command handler returns false without doing anything.

Treat it as an unfinished feature, not as configuration. If you are looking for the swiftDialog --jsonfile equivalent, it does not exist yet; build the command line, or generate a command file, from your script instead.

The same applies to the four built-in themes (corporate, dark, modern, enterprise) and the setstyle styling layer: they are implemented in the core library but no command or flag routes to them, and setstyle is not even in the command parser's accepted verb list.

Clone this wiki locally