📦 Download Now • 🐛 Found a Bug? • 💡 Share Ideas • 📈 Contribute
Responsive .NET 9 launcher for single-instance programs, adhering to WPF MVVM principles.
Designed for novice users.
🖼️ Additional previews
Static previews are available in each subfolder here
- Supported on Windows 10 1607+
- Tested on Windows 10 21H2 and 22H2
- May work on previous OS versions, but this is unsupported.
This program is intended to be deployed by administrators, and used by novice users.
As someone who administers the system of a forgetful novice user, I constantly seek ways to minimise any required knowledge.
One of the ways I manifest this is by making the Start menu their first port of call for any task. I even stuck a label under it re-iterating this, as it means less GUIs have to be learnt.
This concept perfectly matches the simple tile layout of Windows 10's Start menu.
Some programs, however, do not offer the ability to re-use existing background instances when their executables are launched.
Instead, they will either present verbose warnings with no way to show the existing UI (OBS recording software), or simply do nothing (Brother ControlCenter4 scanning software).
Others fail to present a GUI even when launched as the first instance, opting to silently create a tray icon instead.
If the user does not understand the concept of program instances, and that the small tray icon in the corner is a means to control one, it can result in them getting lost or launching several instances of the same program.
This program acts as a middleman to solve this problem.
A copy of it is configured to launch another application.
Then, a shortcut to that copy (with an appropriate icon) is pinned to the Start menu instead of the specified application itself.
When started, it will check if the target program is already running, and:
- if so - presents the user with a guide on how to use its tray icon
- if not - launches the program, then presents the same guide (assuming it minimises to tray)
- if multiple instances - alerts the user to contact their administrator
The guide is displayed near the notification tray area in a frameless and reliably always-on-top state, ensuring the user can't accidentally close, resize or miss it.
The contents of all GUI elements are fully replaceable in the config file, allowing you to finely tailor this program to your user's needs.
The responsive XAML design accommodates text labels of any length, can appear in any four corners of the screen, and auto adjusts to the system's colour theme (light/dark).
The target program can be launched either directly or via Task Scheduler, with full support for working directories, launch arguments and environment variables (such as QT_SCALE_FACTOR).
The configuration file is pre-loaded with values for an ideal use case (OBS with shutdown check bypassed), so you have an idea of what to enter.
-
Build the project or download a release.
-
Copy all files to a directory named after the target application to launch.
-
Open
App-SingleInstanceTrayGuide-Win.dll.configin a text editor and configure the options. -
Create a shortcut to
App-SingleInstanceTrayGuide-Win.exeand name it after the target application to launch. -
Right click the shortcut > Properties > Change Icon > Select the .exe / .ico file of the target application to launch.
-
Right click the shortcut > Pin to start.
- Option to highlight target program's tray icon with a red box (via UIAutomation)
- Option to make this a flashing box, with customisable flash rate
- Option to automatically move mouse to the target program's tray icon (via UIAutomation)
- Option to temporarily lock the mouse in this position for a specified time (e.g, 1s)
Important
This project makes use of design-time ViewModels to display UI elements in the WPF designer.
This functionality is currently unsupported in JetBrains Rider.
It is highly recommended that you use Visual Studio 2022 or above instead.
- .NET 9 SDK
-
Run
dotnet buildin the project root (src). -
Binaries are located in
App-SingleInstanceTrayGuide-Win\bin\Debug\net9.0-windows.
-
Run
dotnet publish -c Releasein the project root (src). -
Binaries are located in
App-SingleInstanceTrayGuide-Win\bin\Release\net9.0-windows\publish.
-
Open
App-SingleInstanceTrayGuide-Win.slnfrom the project root (sln). -
Set the
ConfigurationtoDebugand thePlatformtoAny CPU. -
Select
Build > Build Solution. -
Binaries are located in
App-SingleInstanceTrayGuide-Win\bin\Debug\net9.0-windows.
-
Open
App-SingleInstanceTrayGuide-Win.slnfrom the project root (sln). -
Set the
ConfigurationtoReleaseand thePlatformtoAny CPU. -
Select
Build > Build Solution. -
Binaries are located in
App-SingleInstanceTrayGuide-Win\bin\Release\net9.0-windows.
All *.exe binary files of this project compiled by me are digitally self-signed. The attached certificate should carry this serial number:
4cedc2fe9c34a68e4c9ea1e2d379fdee
If the serial number on your copy does not match this, or the digital certificate is missing the file has potentially been tampered with and should be deleted immediately.
You can check this by right clicking on the App-SingleInstanceTrayGuide-Win .exe / Application file > Properties > Digital Signatures > Select the one named "sjain882" > Details > View Certificate > Details > Serial Number.
The serial number for this project's binaries will be different to the serial found in my other projects - this is completely normal.
-
The SvgToXaml project for allowing conversion of SVG images to XAML resource dictionaries
-
Kampa Plays for a great set of C# WPF tutorials
This software is licensed under the GNU General Public License v3 (GPL-3) licence. Please see https://www.gnu.org/licenses/gpl-3.0.en.html for more information.
This software is provided "As is", without warranty of any kind, express or implied, including but not limited to the warranties of merchantability, fitness for a particular purpose and noninfringement. I cannot be held personally responsible if usage of this software results in loss of work or breakage of your operating system.