{{ message }}
Repository navigation
Releases: corolin/winsvc-wrapper
Releases · corolin/winsvc-wrapper
Release list
v0.1.3.1
test(scm): assert DACL rights by membership; drop ConvertTo-SecureString - Windows normalizes SDDL on read-back: the delegated RPWPLC came back as LCRPWP (bits reordered) and GA expanded to the concrete service rights, so substring assertions can never match. Parse the ACE (type;flags;rights;o;i;sid) and assert rights membership; a plain unit test pins the parser against the verbatim read-back string. - Build the throwaway-account SecureString via [SecureString]::new() + AppendChar instead of ConvertTo-SecureString: its module (Microsoft.PowerShell.Security) fails to auto-load on some machines (CouldNotAutoloadMatchingModule) while LocalAccounts loads fine; ::new()/AppendChar are CLR/language features with no cmdlet dependency.
v0.1.3
Warning
This release is broken — use v0.1.3.1 instead.
allow_start_stop (and DACL-only security_descriptor) installs fail with error 87; fixed in v0.1.3.1.
Highlights
[service] allow_start_stop = [accounts]— delegateSERVICE_START/SERVICE_STOP(+QUERY_STATUS) to listed accounts via a generated service DACL. Delegated users start/stop the service with zero UAC prompts; admins and SYSTEM keep full control, interactive users keep the default read set sorsw statuskeeps working. Mutually exclusive withsecurity_descriptor(validate rejects both).- Smart elevation gate —
install/uninstall/refresh/applyelevate pre-emptively;start/stop/restarttry unelevated first and only relaunch elevated afterERROR_ACCESS_DENIED. Delegated users never see a prompt, everyone else sees exactly one. rsw apply— refresh + ensure-started in one UAC prompt. A running service is left alone (config takes effect on next start).- Full-field config manuals (en/cn) now ship inside both release zips; the lite zips carry the same manuals with the
[[download]]block stripped, each validated by the matching build before packing. - Deps: rustls 0.23.43 → 0.23.45 (RUSTSEC-2026-0285).
v0.1.3.1-legacy
test(scm): assert DACL rights by membership; drop ConvertTo-SecureString - Windows normalizes SDDL on read-back: the delegated RPWPLC came back as LCRPWP (bits reordered) and GA expanded to the concrete service rights, so substring assertions can never match. Parse the ACE (type;flags;rights;o;i;sid) and assert rights membership; a plain unit test pins the parser against the verbatim read-back string. - Build the throwaway-account SecureString via [SecureString]::new() + AppendChar instead of ConvertTo-SecureString: its module (Microsoft.PowerShell.Security) fails to auto-load on some machines (CouldNotAutoloadMatchingModule) while LocalAccounts loads fine; ::new()/AppendChar are CLR/language features with no cmdlet dependency.
v0.1.2
Highlights
- Two flavors:
full(~3 MB) ships everything;lite(~1.6 MB, built with--no-default-features) is the fully offline wrapper without[[download]]— it warns and skips download entries (or aborts the start when an entry setsfail_on_error = true).rsw --versionshows the flavor. [download.tls]: per-entry custom CA and mTLS client certificates (PEM). Certificate verification is never disabled.[[download]]timeout_secs(default 120): whole-request budget; bodies stream to disk instead of buffering in memory.- Fixes: graceful-stop ctrl-event delivery (the hidden helper subcommand never matched its spawner — the stop signal is now verifiably delivered by rsw itself); unterminated final log lines are no longer lost to an exit race (pumps are drained before exit, log lines cap at 64 KiB); SCM wait hints clamped at 24 h (no more "Too long wait_hint" panic);
a.jar/a.zipdownload staging collision; roll-by-size-time retention now prunes whole old periods. rsw convert: WinSW v2<serviceaccount>(domain+user, allowservicelogon, prompt warning),preshutdownTimeoutkey fixed; no longer emits the no-ophide_window.rsw validatemasks account/download passwords and proxy credentials.- CI: RustSec audit gate (weekly), pinned MSRV 1.88 job, dual-flavor builds, SHA256SUMS with every release.
⚠ Config compatibility
Configs are parsed with deny_unknown_fields, so older rsw binaries cannot read configs that use the new fields ([download.tls], timeout_secs). Configs using them require rsw ≥ 0.1.2.
v0.1.2-legacy
ci(legacy): publish as perpetual pre-release
