<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Recent changes to Commandog Dispatcher</title><link>https://sourceforge.net/p/sucrose/wiki/Commandog%2520Dispatcher/</link><description>Recent changes to Commandog Dispatcher</description><atom:link href="https://sourceforge.net/p/sucrose/wiki/Commandog%20Dispatcher/feed" rel="self"/><language>en</language><lastBuildDate>Sat, 04 Jul 2026 04:15:46 -0000</lastBuildDate><atom:link href="https://sourceforge.net/p/sucrose/wiki/Commandog%20Dispatcher/feed" rel="self" type="application/rss+xml"/><item><title>Commandog Dispatcher modified by Bayram Emekli</title><link>https://sourceforge.net/p/sucrose/wiki/Commandog%2520Dispatcher/</link><description>&lt;div class="markdown_content"&gt;&lt;pre&gt;--- v1
+++ v2
@@ -98,7 +98,7 @@
 | `Cycyling` | Same as `RestartLive` but **without** killing Backgroundog (wallpaper slideshow advance; note the in-code spelling "Cycyling"). |
 | `Scheduler` | Create / Enable / Disable / Delete a Windows scheduled task (`SchedulerCommandType`), task name `Autorun for Sucrose`. |
 | `Startup` / `StartupM` / `StartupP` | Register Windows startup (per-user / machine / priority) via Skylark.Wing. |
-| `Import` / `Export` / `Reset` / `Temp` / `Versioning` | Async theme/library/file operations through `Sucrose.Shared.Space.Helper.*`. |
+| `Import` / `Export` / `Reset` / `Temp` / `Versioning` | Theme/library/file operations through `Sucrose.Shared.Space.Helper.*` (Import/Export/Reset/Temp are awaited async; `Versioning` calls the synchronous `Delete.Folder`). |
 | `Log` / `Wiki` / `Report` / `Publish` / `Official` / `Repository` / `Discussions` / `QuotingGoogle` / `QuotingTranslate` / `Bundle` | `Run(value)` — open a URL or file (the `Bundle` case launches the downloaded installer). |
 | `Test` | Diagnostic echo: prints each typed value to the console. |

&lt;/pre&gt;
&lt;/div&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Bayram Emekli</dc:creator><pubDate>Sat, 04 Jul 2026 04:15:46 -0000</pubDate><guid>https://sourceforge.netacc1a1f1cd86ab0d1aa8ee12fe7378386d324b69</guid></item><item><title>Commandog Dispatcher modified by Bayram Emekli</title><link>https://sourceforge.net/p/sucrose/wiki/Commandog%2520Dispatcher/</link><description>&lt;div class="markdown_content"&gt;&lt;h1 id="h-commandog-dispatcher"&gt;Commandog Dispatcher&lt;/h1&gt;
&lt;p&gt;&lt;code&gt;Sucrose.Commandog.exe&lt;/code&gt; is the heart of the Sucrose process model: a &lt;strong&gt;short-lived command dispatcher / process broker&lt;/strong&gt;. Almost every cross-process action — set/restart/cycle the wallpaper, kill a process, open the Portal, run a service, import/export a theme, register startup, show a crash dialog — is performed by spawning Commandog with a single encoded argument string. Commandog parses that string, performs exactly one action (usually by launching the right executable or calling a shared helper), and then exits. It is &lt;strong&gt;not&lt;/strong&gt; a resident service. This page explains how the broker works internally; the full command catalogue lives on the &lt;a href="./Command-Reference"&gt;Command Reference&lt;/a&gt; page.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Stability disclaimer:&lt;/strong&gt; Commandog's command string is an &lt;strong&gt;internal IPC protocol, not a stable, supported public CLI.&lt;/strong&gt; End users never type these commands — the UI builds them. The format and the command set may change between versions. See &lt;a href="./Command-Reference"&gt;Command Reference&lt;/a&gt; and &lt;a href="./Automation-Examples"&gt;Automation Examples&lt;/a&gt;.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2 id="h-contents"&gt;Contents&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="#what-commandog-is-and-is-not"&gt;What Commandog is (and is not)&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="#entry-point-and-lifecycle"&gt;Entry point and lifecycle&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="#the-command-string-wire-format"&gt;The command string wire format&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="#parse-flow"&gt;Parse flow&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="#typed-value-parsing"&gt;Typed value parsing&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="#routing-what-the-dispatcher-does"&gt;Routing: what the dispatcher does&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="#who-emits-commands"&gt;Who emits commands&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="#see-also"&gt;See also&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="h-what-commandog-is-and-is-not"&gt;What Commandog is (and is not)&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;It is&lt;/strong&gt; a console (hidden) process at &lt;code&gt;src/Project/Sucrose.Commandog&lt;/code&gt;, re-runnable, that runs one command and exits via &lt;code&gt;Environment.Exit(0)&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;It is not&lt;/strong&gt; a long-lived service, and it is &lt;strong&gt;not&lt;/strong&gt; related to the live-data IPC channels (Pipe / Signal / Transmission). Despite the shared "command" wording, Commandog is process-argument based; the live-data transports are described on the &lt;a href="./IPC"&gt;IPC&lt;/a&gt; page.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Key files: &lt;code&gt;src/Project/Sucrose.Commandog/App.cs&lt;/code&gt; (entry point), &lt;code&gt;Helper/Arguments.cs&lt;/code&gt; (the command switch), &lt;code&gt;Helper/Parse.cs&lt;/code&gt; (typed argument parsing), &lt;code&gt;Helper/Scheduler.cs&lt;/code&gt; (Windows Task Scheduler operations), &lt;code&gt;Helper/Miscellaneous.cs&lt;/code&gt; (runtime type sniffing for &lt;code&gt;Test&lt;/code&gt;). The command enum is &lt;code&gt;src/Shared/Sucrose.Shared.Dependency/Enum/CommandType.cs&lt;/code&gt;; the delimiter constants are in &lt;code&gt;src/Library/Sucrose.Memory/Manage/Readonly/General.cs&lt;/code&gt;.&lt;/p&gt;
&lt;h2 id="h-entry-point-and-lifecycle"&gt;Entry point and lifecycle&lt;/h2&gt;
&lt;p&gt;&lt;code&gt;App.cs&lt;/code&gt; &lt;code&gt;Main()&lt;/code&gt;:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;code&gt;SSDHG.Configure()&lt;/code&gt; (graphics — high-performance GPU) and &lt;code&gt;SSDHR.Configure()&lt;/code&gt; (runtime — bundled private .NET runtime, RELEASE-only).&lt;/li&gt;
&lt;li&gt;Sets &lt;code&gt;Console.InputEncoding/OutputEncoding = UTF8&lt;/code&gt; — &lt;strong&gt;required&lt;/strong&gt; so the &lt;code&gt;✔&lt;/code&gt; / &lt;code&gt;✖&lt;/code&gt; Unicode delimiters survive (mojibake here means the wrong console encoding).&lt;/li&gt;
&lt;li&gt;Sets thread culture from &lt;code&gt;Sucrose.Manager.Manage.General.Culture&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Runs &lt;code&gt;Arguments.Parse(args)&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Always calls &lt;code&gt;Environment.Exit(0)&lt;/code&gt; in &lt;code&gt;finally&lt;/code&gt; — it does not stay resident.&lt;/li&gt;
&lt;/ol&gt;
&lt;h2 id="h-the-command-string-wire-format"&gt;The command string wire format&lt;/h2&gt;
&lt;p&gt;Built from constants in &lt;code&gt;src/Library/Sucrose.Memory/Manage/Readonly/General.cs&lt;/code&gt;:&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Constant&lt;/th&gt;
&lt;th&gt;Value&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;StartCommandChar&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;'✔'&lt;/code&gt; (U+2714)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;StartCommand&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;"✔"&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;ValueSeparatorChar&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;'✖'&lt;/code&gt; (U+2716)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;ValueSeparator&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;"✖"&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;Layout:&lt;/p&gt;
&lt;div class="codehilite"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;✔&amp;lt;CommandName&amp;gt;✖&amp;lt;Value0&amp;gt;✖&amp;lt;Value1&amp;gt;✖&amp;lt;Value2&amp;gt;...
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Examples:&lt;/p&gt;
&lt;div class="codehilite"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;✔&lt;span class="nv"&gt;Interface&lt;/span&gt;✖&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nv"&gt;path&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="nv"&gt;to&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="nv"&gt;Portal&lt;/span&gt;.&lt;span class="nv"&gt;exe&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;
✔&lt;span class="nv"&gt;Interface&lt;/span&gt;✖&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nv"&gt;path&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="nv"&gt;to&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="nv"&gt;Portal&lt;/span&gt;.&lt;span class="nv"&gt;exe&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;✖&lt;span class="nv"&gt;GeneralSetting&lt;/span&gt;
✔&lt;span class="nv"&gt;Live&lt;/span&gt;✖&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nv"&gt;path&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="nv"&gt;to&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="nv"&gt;engine&lt;/span&gt;.&lt;span class="nv"&gt;exe&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;
✔&lt;span class="nv"&gt;RestartLive&lt;/span&gt;✖&lt;span class="nv"&gt;Unknown&lt;/span&gt;
✔&lt;span class="nv"&gt;Watchdog&lt;/span&gt;✖&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nv"&gt;path&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="nv"&gt;to&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="nv"&gt;Watchdog&lt;/span&gt;.&lt;span class="nv"&gt;exe&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;✖&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nv"&gt;Base64&lt;/span&gt;&lt;span class="ss"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;app&lt;/span&gt;✖&lt;span class="nv"&gt;ex&lt;/span&gt;✖&lt;span class="k"&gt;show&lt;/span&gt;✖&lt;span class="nv"&gt;log&lt;/span&gt;&lt;span class="ss"&gt;)&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Anyone reproducing a command externally must emit these exact &lt;code&gt;✔&lt;/code&gt; / &lt;code&gt;✖&lt;/code&gt; characters.&lt;/p&gt;
&lt;h2 id="h-parse-flow"&gt;Parse flow&lt;/h2&gt;
&lt;p&gt;&lt;code&gt;Arguments.Parse&lt;/code&gt; (&lt;code&gt;Helper/Arguments.cs&lt;/code&gt;):&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;code&gt;string.Join(" ", args)&lt;/code&gt; to recombine the argument tokens into one string.&lt;/li&gt;
&lt;li&gt;Require the combined string to &lt;strong&gt;&lt;code&gt;StartsWith("✔")&lt;/code&gt;&lt;/strong&gt; AND &lt;strong&gt;&lt;code&gt;Contains("✖")&lt;/code&gt;&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;Strip the leading &lt;code&gt;✔&lt;/code&gt; (&lt;code&gt;Combined[1..]&lt;/code&gt;), then &lt;code&gt;Split('✖')&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;First segment = command &lt;strong&gt;Name&lt;/strong&gt;; remaining segments = &lt;strong&gt;Values&lt;/strong&gt; (at least one is required; total parts ≥ 2).&lt;/li&gt;
&lt;li&gt;&lt;code&gt;Enum.TryParse&amp;lt;CommandType&amp;gt;(Name, ignoreCase: true, ...)&lt;/code&gt; — &lt;strong&gt;command names are case-insensitive&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;switch&lt;/code&gt; on the parsed &lt;code&gt;CommandType&lt;/code&gt;.&lt;/li&gt;
&lt;/ol&gt;
&lt;h2 id="h-typed-value-parsing"&gt;Typed value parsing&lt;/h2&gt;
&lt;p&gt;Values are coerced by &lt;code&gt;Parse.ArgumentValue&amp;lt;T&amp;gt;&lt;/code&gt; (&lt;code&gt;Helper/Parse.cs&lt;/code&gt;):&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;&lt;code&gt;T&lt;/code&gt;&lt;/th&gt;
&lt;th&gt;Conversion&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;int&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;int.TryParse&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;bool&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;bool.TryParse&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;an enum type&lt;/td&gt;
&lt;td&gt;&lt;code&gt;Enum.Parse&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;anything else&lt;/td&gt;
&lt;td&gt;the raw string&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;&lt;code&gt;Miscellaneous.GetType(string)&lt;/code&gt; sniffs &lt;code&gt;bool&lt;/code&gt; first, then &lt;code&gt;int&lt;/code&gt;, else &lt;code&gt;string&lt;/code&gt; — used only by the diagnostic &lt;code&gt;Test&lt;/code&gt; command.&lt;/p&gt;
&lt;h2 id="h-routing-what-the-dispatcher-does"&gt;Routing: what the dispatcher does&lt;/h2&gt;
&lt;p&gt;The &lt;code&gt;switch&lt;/code&gt; in &lt;code&gt;Arguments.cs&lt;/code&gt; maps each &lt;code&gt;CommandType&lt;/code&gt; to a side effect. &lt;code&gt;Run(x)&lt;/code&gt; below is &lt;code&gt;Sucrose.Shared.Space.Helper.Processor.Run&lt;/code&gt; (a ShellExecute); many "open" commands simply pass a path or URL to &lt;code&gt;Run&lt;/code&gt;. A representative slice:&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Command&lt;/th&gt;
&lt;th&gt;Action in Commandog&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;Live&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;Run(value)&lt;/code&gt; — start the given &lt;strong&gt;engine exe&lt;/strong&gt; directly.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;Kill&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;Processor.Kill(name)&lt;/code&gt; — kill all processes by name.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;Interface&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Start Portal (&lt;code&gt;Run(portal[, settingPage])&lt;/code&gt;); optional 2nd value = settings-page selector (&lt;code&gt;ArgumentCommandType&lt;/code&gt;).&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;Property&lt;/code&gt; / &lt;code&gt;PropertyA&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Launch &lt;code&gt;Sucrose.Property.exe&lt;/code&gt; (the Customize UI), with or without a theme argument.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;Update&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Launch &lt;code&gt;Sucrose.Update.exe&lt;/code&gt; (optional 2nd value, run hidden).&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;Reportdog&lt;/code&gt; / &lt;code&gt;Backgroundog&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Launch the respective service exe.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;Watchdog&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;When exactly 2 values: launch &lt;code&gt;Sucrose.Watchdog.exe&lt;/code&gt; with the Base64 error payload (hidden).&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;RestartLive&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Stop live + stop subprocess, &lt;strong&gt;kill &lt;code&gt;Sucrose.Backgroundog.exe&lt;/code&gt;&lt;/strong&gt;, &lt;code&gt;Run.Start()&lt;/code&gt;, wait 1500 ms, retry if not running. (Wallpaper &lt;strong&gt;reload&lt;/strong&gt;.)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;Cycyling&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Same as &lt;code&gt;RestartLive&lt;/code&gt; but &lt;strong&gt;without&lt;/strong&gt; killing Backgroundog (wallpaper slideshow advance; note the in-code spelling "Cycyling").&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;Scheduler&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Create / Enable / Disable / Delete a Windows scheduled task (&lt;code&gt;SchedulerCommandType&lt;/code&gt;), task name &lt;code&gt;Autorun for Sucrose&lt;/code&gt;.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;Startup&lt;/code&gt; / &lt;code&gt;StartupM&lt;/code&gt; / &lt;code&gt;StartupP&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Register Windows startup (per-user / machine / priority) via Skylark.Wing.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;Import&lt;/code&gt; / &lt;code&gt;Export&lt;/code&gt; / &lt;code&gt;Reset&lt;/code&gt; / &lt;code&gt;Temp&lt;/code&gt; / &lt;code&gt;Versioning&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Async theme/library/file operations through &lt;code&gt;Sucrose.Shared.Space.Helper.*&lt;/code&gt;.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;Log&lt;/code&gt; / &lt;code&gt;Wiki&lt;/code&gt; / &lt;code&gt;Report&lt;/code&gt; / &lt;code&gt;Publish&lt;/code&gt; / &lt;code&gt;Official&lt;/code&gt; / &lt;code&gt;Repository&lt;/code&gt; / &lt;code&gt;Discussions&lt;/code&gt; / &lt;code&gt;QuotingGoogle&lt;/code&gt; / &lt;code&gt;QuotingTranslate&lt;/code&gt; / &lt;code&gt;Bundle&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;Run(value)&lt;/code&gt; — open a URL or file (the &lt;code&gt;Bundle&lt;/code&gt; case launches the downloaded installer).&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;Test&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Diagnostic echo: prints each typed value to the console.&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;The full &lt;code&gt;CommandType&lt;/code&gt; table (31 commands), plus &lt;code&gt;ArgumentCommandType&lt;/code&gt; (settings-page targets) and &lt;code&gt;SchedulerCommandType&lt;/code&gt;, are documented on the &lt;a href="./Command-Reference"&gt;Command Reference&lt;/a&gt; page. Two sub-enums:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;ArgumentCommandType&lt;/code&gt;: &lt;code&gt;OtherSetting, DonateSetting, SystemSetting, GeneralSetting, PersonalSetting, WallpaperSetting, PerformanceSetting&lt;/code&gt; — the 2nd value of &lt;code&gt;Interface&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;SchedulerCommandType&lt;/code&gt;: &lt;code&gt;Create, Enable, Delete, Disable&lt;/code&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="h-who-emits-commands"&gt;Who emits commands&lt;/h2&gt;
&lt;p&gt;Commands are built by the UI and helper layers, never by end users:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Launcher tray actions&lt;/strong&gt; — each tiny static &lt;code&gt;Command()&lt;/code&gt; under &lt;code&gt;src/Shared/Sucrose.Shared.Launcher/Command/*.cs&lt;/code&gt; builds a &lt;code&gt;✔...✖...&lt;/code&gt; string and calls &lt;code&gt;Processor.Run(Commandog, ...)&lt;/code&gt;: &lt;code&gt;Interface.cs&lt;/code&gt; → &lt;code&gt;✔Interface✖&amp;lt;Portal&amp;gt;&lt;/code&gt;, &lt;code&gt;Setting.cs&lt;/code&gt; → &lt;code&gt;✔Interface✖&amp;lt;Portal&amp;gt;✖GeneralSetting&lt;/code&gt;, &lt;code&gt;Property.cs&lt;/code&gt; → &lt;code&gt;✔Property✖&amp;lt;Property&amp;gt;&lt;/code&gt;, &lt;code&gt;Reload.cs&lt;/code&gt; → &lt;code&gt;✔RestartLive✖Unknown&lt;/code&gt;, &lt;code&gt;Update.cs&lt;/code&gt; → &lt;code&gt;✔Update✖&amp;lt;Update&amp;gt;&lt;/code&gt; (or &lt;code&gt;...✖False&lt;/code&gt; for silent), &lt;code&gt;Reportdog.cs&lt;/code&gt; → &lt;code&gt;✔Reportdog✖&amp;lt;Reportdog&amp;gt;&lt;/code&gt;, &lt;code&gt;Version.cs&lt;/code&gt; → &lt;code&gt;✔Versioning✖&amp;lt;LocalAppData\Sucrose&amp;gt;✖&amp;lt;version&amp;gt;✖false&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Crash path&lt;/strong&gt; — &lt;code&gt;Sucrose.Shared.Space/Helper/Watchdog.cs&lt;/code&gt; builds &lt;code&gt;✔Watchdog✖&amp;lt;Watchdog&amp;gt;✖&amp;lt;Base64 payload&amp;gt;&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Updater&lt;/strong&gt; — &lt;code&gt;Sucrose.Update&lt;/code&gt;'s MainWindow builds &lt;code&gt;✔Bundle✖&amp;lt;path&amp;gt;&lt;/code&gt; to launch the downloaded installer.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Engine&lt;/strong&gt; — &lt;code&gt;Sucrose.Shared.Engine/Event/Handler.cs&lt;/code&gt; emits &lt;code&gt;✔RestartLive✖Unknown&lt;/code&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Note that &lt;code&gt;Close.cs&lt;/code&gt; and &lt;code&gt;Engine.cs&lt;/code&gt; are exceptions — they act locally (kill processes / start the engine) and do &lt;strong&gt;not&lt;/strong&gt; route through Commandog.&lt;/p&gt;
&lt;h2 id="h-see-also"&gt;See also&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="./Command-Reference"&gt;Command Reference&lt;/a&gt; — the full 31-command catalogue and sub-enums.&lt;/li&gt;
&lt;li&gt;&lt;a href="./Automation-Examples"&gt;Automation Examples&lt;/a&gt; — practical command examples and the stability disclaimer.&lt;/li&gt;
&lt;li&gt;&lt;a href="./IPC"&gt;IPC&lt;/a&gt; — the separate live-data Pipe / Signal / Transmission channels.&lt;/li&gt;
&lt;li&gt;&lt;a href="./Architecture-Overview"&gt;Architecture Overview&lt;/a&gt; — why everything routes through a broker.&lt;/li&gt;
&lt;li&gt;&lt;a href="./Lifecycle"&gt;Lifecycle&lt;/a&gt; — where Reload / Cycle / Watchdog commands fire during runtime.&lt;/li&gt;
&lt;/ul&gt;&lt;/div&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Bayram Emekli</dc:creator><pubDate>Sat, 04 Jul 2026 04:15:20 -0000</pubDate><guid>https://sourceforge.net486c47ca6b36108d96ee5fd365e81244ab835db1</guid></item></channel></rss>