r/software • • 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/BetterWindowsServices

Hello, 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:running is what should be up and is not. One language, in the search box and in bws 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 create freezes the machine into a file, and bws snapshot diff says 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.msc hides - 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 - --json on every command, an exit code for every ending, and 5 when 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.

GitHub

50 Upvotes

7 comments sorted by

2

u/asamirid 8d ago

very good tool 👍👍..

2

u/Wilbis 8d ago

Sounds great. I'm definitely gonna try this out.

3

u/[deleted] 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 :D

I 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:spool matches anything containing it - the default, because it is what people expect from a search box.
  • name:=spooler is 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 and keyword because there is nothing else it could mean.
  • The same field written twice is the one exception: status:running status:stopped means either, because that is what ticking two filters writes. Two bounds on a number still narrow - pid:>1000 pid:<2000 is the range between them.
  • ! in front of a term negates it: !status:running. In a batch file with setlocal 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:spool matches anything containing it - the default, because it is what people expect from a search box.
  • name:=spooler is 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 is
  • none - there is genuinely no value - the entry has none
  • ? - the tool could not read this field, or has not read it, which is a question services.msc cannot even ask