5 Commits

Author SHA1 Message Date
Ludwig Lehnert
81bd495af9 fix: retry busy queue requests
All checks were successful
Release / build-release (push) Successful in 3s
2026-07-01 15:39:14 +00:00
Ludwig Lehnert
b41bab4285 fix: harden queue and request handling
All checks were successful
Release / build-release (push) Successful in 3s
2026-07-01 15:03:29 +00:00
Ludwig Lehnert
b603f4d39c replace daemon with request drop
All checks were successful
Release / build-release (push) Successful in 3s
2026-07-01 14:19:27 +00:00
Ludwig Lehnert
526c40403b fix gui timeout; ignore dist
All checks were successful
Release / build-release (push) Successful in 4s
2026-07-01 13:20:24 +00:00
Ludwig Lehnert
7fc0602818 fix gui runspace cleanup
All checks were successful
Release / build-release (push) Successful in 3s
2026-07-01 13:02:48 +00:00
5 changed files with 935 additions and 744 deletions

1
.gitignore vendored Normal file
View File

@@ -0,0 +1 @@
dist/

View File

@@ -2,7 +2,7 @@
Windows self-service software catalog backed by `winget`.
Users install approved software through a small GUI or request helper. A SYSTEM scheduled task runs a named-pipe daemon, authenticates the connecting Windows user, validates requests against Group Policy, then queues work for a SYSTEM `winget` worker.
Users install approved software through a small GUI or request helper. User tools write request files to a controlled drop directory. A SYSTEM scheduled task validates those requests against Group Policy, queues approved work, then runs a SYSTEM `winget` worker.
## What It Does
@@ -14,6 +14,7 @@ Users install approved software through a small GUI or request helper. A SYSTEM
- Shows current queue task and progress in the GUI.
- Runs `winget upgrade --all` every 2 hours.
- Tracks installed state from `winget export`, not from request history.
- Polls user request files every minute; no long-lived user-facing daemon is required.
## Policy
@@ -71,8 +72,16 @@ Generated files are written to:
C:\ProgramData\__Softwarekatalog\
```
Runtime request files are written below:
```text
C:\ProgramData\__Softwarekatalog\Requests\
C:\ProgramData\__Softwarekatalog\Processed\
C:\ProgramData\__Softwarekatalog\Failed\
```
## Notes
- Requires Windows, Desktop App Installer, and `winget`.
- The daemon runs as `LocalSystem`; keep catalog policy restricted to trusted admins.
- SYSTEM scheduled tasks validate and execute requests; keep catalog policy restricted to trusted admins.
- Package IDs and silent machine-scope support depend on upstream `winget` packages.

35
dist/setup.ps1 vendored

File diff suppressed because one or more lines are too long

View File

@@ -17,7 +17,7 @@ cat > "$out" <<EOF
# ASCII-only bootstrap generated from setup.ps1. Do not edit.
[CmdletBinding()]
param(
[ValidateSet('Install','Daemon','UpgradeAll','ApplyPolicy','ProcessQueue','ProcessRequest')]
[ValidateSet('Install','UpgradeAll','ApplyPolicy','ProcessQueue','ProcessRequest','ProcessRequests')]
[string]\$Mode = 'Install',
[ValidateSet('Install','Uninstall')]
[string]\$RequestAction = 'Install',

1596
setup.ps1

File diff suppressed because it is too large Load Diff