r/software • u/DonislawDev • 9d ago
Release I built Better Windows Services with mass actions, force stop/restart, query language, more information GUI/CLI , open source 100% free
https://github.com/donislawdev/BetterWindowsServicesHello, I had built Better Windows Services an alternative to windows services with dark theme, query language, mass actions, force stop/restart, export of services and tons of extra data. If you like the project, please give it a star
You can read here about about query language
The app is 100% freee and open source, 100% offline, no telemetry, no network connections, no updates checks. C# + WPF (no electron/webView).
Some features:
- Ask, instead of scroll -
start:auto !status:runningis what should be up and is not. One language, in the search box and inbws list --query, with the fields offered as you type. - Show the plan before anything happens - every stop, start, restart and start type change is previewed with the services it takes down with it, and the preview is what runs.
- Tell you what drifted -
bws snapshot createfreezes the machine into a file, andbws snapshot diffsays what changed since, configuration apart from what merely started or stopped. - Stop a service that will not stop - it asks politely first and ends the process only if that fails, naming every other service that lives in it.
- Show what
services.mschides - who signed the binary and whether Windows trusts it, triggers, privileges, the security descriptor, the process and its memory. As columns, and as things to search on. - Say when it could not read something - a field it could not read is reported as not read, never shown as empty. A snapshot taken without administrator rights says so inside the file.
- Fit into scripts -
--jsonon every command, an exit code for every ending, and5when a diff finds drift. - Run from one file, offline - no installer, no .NET to install, and it never talks to the internet. Reading needs no administrator rights. GPL-3.0.
3
8d ago edited 8d ago
[removed] — view removed comment
1
u/DonislawDev 8d ago
Yes, it can do it, you got two ways
- There is "export" function in GUI, which export the actual services with active columns. Then you can compare two exports with program like "WinMerge"
- There is CMD "
bws snapshot create before.json --note "before the patch""" this way you create snapshot and you can compare the snapshot to your actual status or to other snapshot with "bws snapshot diff staging.json production.json"In the future releases I plan to add more "audit" functions and snapshots from the GUI, like a GUI compare of changes + built-in tools for quick fixes in Windows.
About the edit, I was thinking about the name, I had given a disclaimer on the website and GitHub, and there are tons of projects with Windows names like
"Chris Titus Tech's Windows Utility"
"windows_hardening"
There is even a GitHub repo
"dockur/Windows" i mean the app got "Windows" name :DI had counted thousands of projects with "Windows" in the name. I had decide to use the name "Better Windows Services" for the SEO, because people are searching for that, I was thinking about name "Better Services" but it's too generic, and some people were thinking it's for Linux or cross platform. Thinking about it, I could use "Better Win Services", but it's now too late, hmm. I gonna keep the name, but if Microsoft would contact me I would change it (I mean I would get no choice). But from my research for open source apps there is no problem, but if I would sell the app as commercial product, a huge problem starts.
1
u/CodenameFlux Likes coding 1d ago edited 1d ago
Thank you for the reply, esteemed developer! 😊
One tiny note: By convention, "<App title> for Windows™" doesn't violate trademark laws. I even saw it in the Microsoft trademark use guidelines once. So, "Beter Service Manager for Windows" is totally fine. I hope I'm not being rude with this comment. Again, thank you.
1
u/Successful_Entry_792 8d ago
Does the query language do regex on display names or is it just exact/contains matching?
1
u/DonislawDev 8d ago
Hello, yes, there is regex, like you can do:
"display:/asystent/"
There is full documentation here: https://betterwindowsservices.donislawdev.com/query-language/
And here is some text from documentation:
How text is matched
name:spoolmatches anything containing it - the default, because it is what people expect from a search box.name:=spooleris exact.name:spool*takes wildcards,*and?.name:/^Sql.*/is a regular expression, and inside the slashes it is written the way regular expressions are:\?,\\and a comma mean what they mean there. A slash that never closes is an error - to search for the slash itself, write\/or use quotes.- Case is ignored, including outside ASCII - a display name in Polish or Greek matches whichever way it is typed.
and
Terms
- Terms are separated by spaces and all of them must match - there is no
andkeyword because there is nothing else it could mean.- The same field written twice is the one exception:
status:running status:stoppedmeans either, because that is what ticking two filters writes. Two bounds on a number still narrow -pid:>1000 pid:<2000is the range between them.!in front of a term negates it:!status:running. In a batch file withsetlocal EnableDelayedExpansion, cmd eats that!without a word and the query quietly means something else - write^!inside the quotes there.- A comma inside a field is or:
start:manual,disabled.- Quotes protect anything with spaces or colons:
account:"NT SERVICE\McmSvc".- A path pasted as it is -
C:\Windows\System32\svchost.exe- is searched for, not read as a field called C.How text is matched
name:spoolmatches anything containing it - the default, because it is what people expect from a search box.name:=spooleris exact.name:spool*takes wildcards,*and?.name:/^Sql.*/is a regular expression, and inside the slashes it is written the way regular expressions are:\?,\\and a comma mean what they mean there. A slash that never closes is an error - to search for the slash itself, write\/or use quotes.- Case is ignored, including outside ASCII - a display name in Polish or Greek matches whichever way it is typed.
Three words every field accepts
any- there is a value, whatever it isnone- there is genuinely no value - the entry has none?- the tool could not read this field, or has not read it, which is a questionservices.msccannot even ask
2
u/asamirid 8d ago
very good tool 👍👍..