Codebasis als Dateien ins Arbeitsrepo statt als Gitlink

QuellCode/CentronERP war nur als Gitlink (Submodul-Referenz auf 79c1142)
getrackt, ohne .gitmodules und ohne erreichbares Remote. Der
Untersuchungsgegenstand der Versuchsreihe war damit nicht reproduzierbar
gesichert: Ein Klon haette ein leeres Verzeichnis erhalten, und die Belege
der 3.287 Anforderungen waeren nicht ueberpruefbar gewesen.

Umstellung:
- Historie nach c:\DEV\CentronERP_git_snapshot_79c1142 ausgelagert
  (vollstaendig lesbar, enthaelt 79c1142 und Vorgaenger 89ccfd6)
- Gitlink aus dem Index entfernt
- Dateiinhalt aufgenommen: 24.557 Dateien, rund 333 MB

Die verschachtelte .gitignore der Codebasis gilt weiter, Build-Artefakte
bleiben ausgeschlossen. Details in Versuche/Versuch_01/_Codebasis-Nachweis.md
This commit is contained in:
Christoph Schwörer
2026-08-26 07:43:51 +02:00
parent 18edae75b6
commit f045b99a25
24664 changed files with 5846716 additions and 1 deletions
Binary file not shown.

After

Width:  |  Height:  |  Size: 464 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 84 KiB

@@ -0,0 +1,90 @@
using System;
using System.Diagnostics;
using System.IO;
using System.Linq;
using System.Runtime.CompilerServices;
using WixSharp;
using WixSharp.CommonTasks;
using WixSharp.Controls;
namespace WixSharpInstaller
{
class Program
{
static int Main()
{
try
{
// Validate input files
var sourceBaseDir = GetInputFileDirectoryPath();
if (Directory.GetFiles(sourceBaseDir).Any() == false)
throw new InvalidOperationException("The \"Files\" input directory is empty.");
// Create project with important properties
var project = new Project("c-entron Nexus");
project.GUID = new Guid("BBBE4001-00B1-41AC-B76F-CD2977F23A89");
project.SetVersionFromFile(Path.Combine(sourceBaseDir, "Files", "CentronNexus.Host.dll"));
project.MajorUpgrade = new MajorUpgrade() // This is basically MajorUpgrade.Default but with AllowSameVersionUpgrades set to true
{
Schedule = new UpgradeSchedule?(UpgradeSchedule.afterInstallInitialize),
DowngradeErrorMessage = "Eine neuere Version von [ProductName] ist bereits installiert.",
AllowSameVersionUpgrades = true // This is needed, to force major upgrades when we change only the 4th number in the version (MSI by default only checks the first 3 numbers)
};
project.SourceBaseDir = sourceBaseDir;
project.ReinstallMode = "amus"; // Make sure to always re-install all files (see commit message for more details)
project.Language = "de-DE";
project.ControlPanelInfo.Manufacturer = "NEXOWARE Systems GmbH";
// Add all files from the "Files" input directory
project.AddDir(new Dir("%ProgramFiles%\\c-entron software gmbh\\c-entron Nexus", new Files("Files\\*.*")));
// Install CentronNexus.exe as windows-service
project.ResolveWildCards().FindFirstFile("CentronNexus.Host.exe").ServiceInstaller = new ServiceInstaller
{
Name = "CentronNexus",
DisplayName = "NEXOWARE ServiceBoard",
Description = "Dieser Windows-Dienst startet NEXOWARE ServiceBoard, und damit alle Projekte die darin enthalten sind, wie z.B. das Web-Angebot oder das ServiceBoard.",
// Make the service start automatically with windows
Start = SvcStartType.auto,
// The documentation states that "Install" is the default value, but it's actually not correct, same for StopOn and RemoveOn
StartOn = SvcEvent.Install,
StopOn = SvcEvent.InstallUninstall_Wait,
RemoveOn = SvcEvent.Uninstall_Wait,
};
// Declare UI
project.UI = WUI.WixUI_InstallDir;
project.RemoveDialogsBetween(NativeDialogs.WelcomeDlg, NativeDialogs.InstallDirDlg); // Remove the license-agreement dialog from the WixUI_InstallDir default UI, its between the WelcomeDlg and the InstallDirDlg
project.BackgroundImage = "Images\\Installer-Background.bmp";
project.BannerImage = "Images\\Installer-Banner.bmp";
// Build MSI — set explicit output path to avoid ambiguity with relative working directory
var outputDir = Path.GetDirectoryName(typeof(Program).Assembly.Location)!;
project.OutFileName = Path.Combine(outputDir, "c-entron Nexus");
project.PreserveTempFiles = true;
Compiler.BuildMsi(project);
var msiPath = project.OutFileName + ".msi";
if (!System.IO.File.Exists(msiPath))
throw new FileNotFoundException($"MSI was not created at expected path: {msiPath}", msiPath);
Console.WriteLine($"MSI successfully created at: {msiPath}");
return 0;
}
#pragma warning disable CA1031
catch (Exception e)
#pragma warning restore CA1031
{
Console.WriteLine(e);
return 1;
}
}
private static string GetInputFileDirectoryPath([CallerFilePath] string callerFilePath = null)
{
return Path.GetDirectoryName(callerFilePath);
}
}
}
@@ -0,0 +1,15 @@
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<OutputType>Exe</OutputType>
<TargetFramework>net10.0-windows</TargetFramework>
<Nullable>disable</Nullable>
<DefaultItemExcludes>$(DefaultItemExcludes);Files\**</DefaultItemExcludes>
</PropertyGroup>
<ItemGroup>
<PackageReference Include="WixSharp.Core" Version="2.13.0" />
<PackageReference Remove="Nerdbank.GitVersioning" />
</ItemGroup>
</Project>