Universal Silent Setup Finder / Console — a C# port of alexandruavadanii/USSF, reimagined as a cross-platform, headless command-line tool.
Given an installer (or any binary stream), ussfc identifies the packaging format and prints the silent-install command line to use.
- Version: 1.4.1.3 (the port started at the upstream AutoIt project's 1.4.1.2)
- Runtime: .NET 10 file-based CLI (
ussf.cs) over a small, unit-tested detection library (src/Ussf.Core) - License: Apache-2.0
Pick the option that fits your workflow.
The fastest way to try ussfc. dnx is a one-shot tool runner shipped with the .NET 10 SDK; the first invocation downloads the package to your NuGet cache, subsequent runs are instant.
dnx ussfc setup.exeIf dnx isn't on your PATH, the equivalent works in any .NET 10 environment:
dotnet tool exec ussfc -- setup.exeFor repeated use, install once and call ussfc directly from any directory:
dotnet tool install -g ussfc
ussfc setup.exeUpdate with dotnet tool update -g ussfc, remove with dotnet tool uninstall -g ussfc.
Grab the archive for your platform from the Releases page:
| Platform | Archive |
|---|---|
| Windows x64 | ussfc-win-x64.zip |
| Windows ARM64 | ussfc-win-arm64.zip |
| Linux x64 | ussfc-linux-x64.tar.gz |
| Linux ARM64 | ussfc-linux-arm64.tar.gz |
| macOS ARM64 (M1+) | ussfc-osx-arm64.tar.gz |
Each archive contains a single NativeAOT-compiled ussfc (or ussfc.exe) binary — no .NET runtime install required.
dotnet run ussf.cs -- setup.exeOr, with the shebang on Unix:
chmod +x ussf.cs
./ussf.cs setup.exeussfc [options] <file_path>
<data> | ussfc [options]
| Option | Description |
|---|---|
--json |
Emit the result as JSON instead of human-readable text. |
--help, -h |
Show usage information. |
--version, -v |
Print the version and exit. |
Analyze a file:
ussfc setup.exeFile: setup.exe
Extension: .exe
Type: NSIS Package
Usage: "setup.exe" /S
Emit JSON:
ussfc --json setup.msi{
"file": "setup.msi",
"extension": ".msi",
"type": "MSI File",
"usage": "msiexec.exe /i \"setup.msi\" /qb",
"notes": ""
}Pipe a binary from stdin:
cat setup.exe | ussfc --json| Extension | Type |
|---|---|
.inf |
Information / Installation file |
.reg |
Registry file |
.msi |
Windows Installer package |
.exe |
NSIS, Inno Setup, InstallShield, Wise, 7-Zip, WinZip, UPX, and more |
Detection combines binary-signature matching (MZ, OLE Compound Document, etc.) with extension and text-content fallbacks.
ussf.cs # file-based CLI entry point (arg parsing, I/O, output)
src/Ussf.Core/ # InstallerDetector — the pure, testable detection logic
tests/Ussf.Core.Tests/ # xUnit test suite for the detection logic
ussf.cs references the core library with a #:project directive, so dotnet run,
dotnet publish, and dotnet pack all keep working on the single file while the
detection logic lives in a normal library that unit tests can reference.
dotnet run ussf.cs -- <args>dotnet test tests/Ussf.Core.Testsdotnet publish ussf.cs \
-c Release \
-r <rid> \
--self-contained true \
-p:PublishSingleFile=true \
-o publishWhere <rid> is one of: win-x64, win-arm64, linux-x64, linux-arm64, osx-arm64.
dotnet pack ussf.cs -c Release -o nupkgThe resulting ussfc.<version>.nupkg is a framework-dependent, platform-agnostic .NET tool package (tools/net10.0/any/) that targets net10.0.
Pushing a tag matching v* (e.g. v1.4.1.3) triggers two workflows:
.github/workflows/build.ymlpacksussf.csas a .NET tool NuGet package and publishes it to nuget.org using Trusted Publishing (OIDC — no API key). The publish job runs in theproductionenvironment and needs aNUGET_USERsecret (the nuget.org profile name)..github/workflows/release.ymlbuilds NativeAOT single-file binaries for five RIDs and publishes a GitHub Release with all binary archives, SHA-256 checksums, and the.nupkg.
Both gate on the test suite, and both are also runnable on demand via the Run workflow button (workflow_dispatch).
- Original AutoIt implementation: Alexandru Avadanii (Apache-2.0).
- C# port and CLI design: Jung-Hyun Nam.
The port began at version 1.4.1.2, mirrored from the upstream project's Version.au3 to make the lineage explicit. Releases from 1.4.1.3 onward carry the C# port's own changes.