Add standalone OCSentinel setup executable builder
Some checks failed
OfficeCom Sentinel Client / build-client (push) Has been cancelled

This commit is contained in:
OfficeCom Codex
2026-07-17 01:07:37 +02:00
parent 38a99f2706
commit fde24f2616
4 changed files with 149 additions and 0 deletions

View File

@@ -0,0 +1,76 @@
using System.Diagnostics;
using System.IO.Compression;
using System.Reflection;
namespace OCSentinelBootstrapper;
internal static class Program
{
private static int Main()
{
string tempRoot = Path.Combine(Path.GetTempPath(), "OCSentinelSetup", Guid.NewGuid().ToString("N"));
string zipPath = Path.Combine(tempRoot, "payload.zip");
string extractRoot = Path.Combine(tempRoot, "payload");
try
{
Directory.CreateDirectory(tempRoot);
Directory.CreateDirectory(extractRoot);
ExtractEmbeddedPayload(zipPath);
ZipFile.ExtractToDirectory(zipPath, extractRoot, overwriteFiles: true);
string installScript = Path.Combine(extractRoot, "scripts", "install-ocsentinel.ps1");
if (!File.Exists(installScript))
{
throw new FileNotFoundException("Embedded payload did not contain install-ocsentinel.ps1", installScript);
}
var process = new Process
{
StartInfo = new ProcessStartInfo
{
FileName = "powershell.exe",
Arguments = $"-ExecutionPolicy Bypass -File \"{installScript}\"",
UseShellExecute = false
}
};
process.Start();
process.WaitForExit();
return process.ExitCode;
}
catch (Exception ex)
{
Console.Error.WriteLine($"OCSentinel installer failed: {ex}");
return 1;
}
finally
{
try
{
if (Directory.Exists(tempRoot))
{
Directory.Delete(tempRoot, recursive: true);
}
}
catch
{
// Best-effort cleanup only.
}
}
}
private static void ExtractEmbeddedPayload(string destinationPath)
{
Assembly assembly = Assembly.GetExecutingAssembly();
using Stream? resourceStream = assembly.GetManifestResourceStream("payload.zip");
if (resourceStream is null)
{
throw new InvalidOperationException("Embedded payload.zip resource was not found.");
}
using FileStream output = File.Create(destinationPath);
resourceStream.CopyTo(output);
}
}