C# Paar Fragen zum Vorgehen

  • Registrierung ist offen, allerdings wurden web.de und gmx.de als Mailanbieter gesperrt. Es gibt aktuell ein Problem mit dem Mailserver, demnach landen die Mails derzeit meistens im Spam.
Status
Not open for further replies.

beNw0w

New member
Newfag
May 5, 2024
6
4
3
Hallo Zusammen,

ich habe mithilfe von C# und ChatGPT eine Updateautomatisierung einer Software erstellt. Diese läuft bis jetzt auch ganz gut, allerdings habe ich einige Knackpunkte bzw. Fragen hinsichtlich Optimierungen:

Im Laufe des Programms werden einige Applikationen der Software gestartet und auf Exitcodes gewartet. Ein Exitcode kann unter Umständen auch sein, das System neuzustarten. Der Systemneustart muss durch das Programm erfolgen. Dies funktioniert auch, allerdings kommt es auf unterschiedlichen Kundensystemen unter Umständen dazu, das der Neustart nicht ausgeführt wird. Dies hängt unteranderem damit zusammen, das ich im Programm den Neustartbefehl gebe und direkt danach das Programm exite, um Timingfehler zu vermeiden. Teilweise war es so, das der Neustart getriggert wurde und das Programm "so schnell war" das es weiter gelaufen ist.

Habt ihr hier Ideen für eine Optimierung? Hilft es zwischen Neustartbefehl und Programexit ein Sleep hinzuzufügen?

Des weiteren möchte ich NLog oder eine andere Loggingbibliothek einsetzen. Könnt ihr mir hier etwas empfehlen?


Viele Grüße
beNw0w
 
Haste ein code snippet?
Irgendwie klingt "mithilfe von C# und ChatGPT" zusammen mit dem Rest, den du geschrieben hast, nicht so als würdest du dich besonders gut auskennen, aber hast dein Programm bei Kunden deployed?
 
Haste ein code snippet?
Irgendwie klingt "mithilfe von C# und ChatGPT" zusammen mit dem Rest, den du geschrieben hast, nicht so als würdest du dich besonders gut auskennen, aber hast dein Programm bei Kunden deployed?

Jaein. Ich bin gelernter Fachinformatiker für Systemintegration, also ich hatte es zum Teil in der Berufsschule und habe mir Powershell mal selbst beigebracht. Spielt im endeffekt ja auch keine Rolle, anbei ein Codesnippet:


C#:
  public class ExecuteOrderLogic
    {
        private const int MaxRetries = 3;
        private readonly string restartFlagRegistryPath = @"SOFTWARE\XXXXXXXXXXXXXX";
        private readonly string restartFlagRegistryValue = "RestartFlag";
        private readonly string autoStartPath = @"SOFTWARE\Microsoft\Windows\CurrentVersion\Run";

        public async Task<int> RunAsync(Action<string> updateStatus)
        {
            int retryCount = 0;
            int exitCode = -1;

            do
            {
                try
                {
                    updateStatus("Executing Order");

                    exitCode = await StartProcessAsync(updateStatus);

                    switch (exitCode)
                    {
                        case 0x01:
                            updateStatus("Reboot required (0x01)");
                            updateStatus("Waiting for all hosts to be ready...");
                            bool hostsReady = await Task.Run(() => RechnerVerwaltungHelper.AreHostsReadyForReboot(updateStatus));

                            if (hostsReady)
                            {
                                if (SetRestartFlagAndAutoRun(updateStatus))
                                {
                                    if (SaveState("ExecuteOrder", updateStatus))
                                    {
                                        updateStatus("Initiating system restart...");
                                        RestartComputer();
                                        Environment.Exit(0);  // Beendet die Anwendung, um den Neustart durchzuführen
                                    }
                                    else
                                    { ..........


C#:
        private void RestartComputer()
        {
            Process.Start(new ProcessStartInfo("shutdown", "/r /t 0")
            {
                CreateNoWindow = true,
                UseShellExecute = false
            });
        }
 
Okay, zwei Sachen:
  1. Wieso willst überhaupt Environment.Exit(0); aufrufen? Sollte sich ja sowieso schliessen wenn der PC restarted.
  2. Wenn du den Exit call trotzdem willst, könntest die RestartComputer function async machen und awaiten:

    C#:
    private async Task RestartComputerAsync() {
      Process.Start(new ProcessStartInfo("shutdown", "/r /t 0") {
        CreateNoWindow = true,
          UseShellExecute = false
      });
    
      // Wait for a short period to ensure the command is processed.
      await Task.Delay(1000);
    }

    Und callen kannst dann so:

    C#:
    if (SaveState("ExecuteOrder", updateStatus))
    {
        updateStatus("Initiating system restart...");
        await RestartComputer();
        Environment.Exit(0);  // Beendet die Anwendung, um den Neustart durchzuführen
    }
 
Last edited:
  • Like
Reactions: beNw0w
Okay, zwei Sachen:
  1. Wieso willst überhaupt Environment.Exit(0); aufrufen? Sollte sich ja sowieso schliessen wenn der PC restarted.
  2. Wenn du den Exit call trotzdem willst, könntest die RestartComputer function async machen und awaiten:

    C#:
    private async Task RestartComputerAsync() {
      Process.Start(new ProcessStartInfo("shutdown", "/r /t 0") {
        CreateNoWindow = true,
          UseShellExecute = false
      });
    
      // Wait for a short period to ensure the command is processed.
      await Task.Delay(1000);
    }

    Und callen kannst dann so:

    C#:
    if (SaveState("ExecuteOrder", updateStatus))
    {
        updateStatus("Initiating system restart...");
        await RestartComputer();
        Environment.Exit(0);  // Beendet die Anwendung, um den Neustart durchzuführen
    }

Das Programm ist so schnell, das es weiterläuft wenn ich es nicht exite
 
Das Programm ist so schnell, das es weiterläuft wenn ich es nicht exite
Dann hast du irgendwo nen Thread laufen der nicht ordentlich beendet.
Ohne kompletten Code und eventuell mehr Infos über die Kundensysteme kann man da wenig sehen. Der reine Restart wird nicht das Problem sein also kann es nur noch alles andere sein.
Will jetzt niemanden beleidigen aber ich würde eine Updatesoftware die so entstanden ist wie du das hier beschreibst als gravierendes Sicherheitsrisiko einstufen.
Ich will mir garnicht ausmalen was du da alles ausführst ohne auf irgendwelche Codesignings oder sonst was zu achten.
 
Dann hast du irgendwo nen Thread laufen der nicht ordentlich beendet.
Ohne kompletten Code und eventuell mehr Infos über die Kundensysteme kann man da wenig sehen. Der reine Restart wird nicht das Problem sein also kann es nur noch alles andere sein.
Will jetzt niemanden beleidigen aber ich würde eine Updatesoftware die so entstanden ist wie du das hier beschreibst als gravierendes Sicherheitsrisiko einstufen.
Ich will mir garnicht ausmalen was du da alles ausführst ohne auf irgendwelche Codesignings oder sonst was zu achten.

tja - wenn ich dir jetzt noch sagen würde, das es hier um den Branchenführer im Steuerberatersegment geht, glaubst du doch glatt an garnichts mehr oder? Wenn du magst, kann ich dir mal auf das Github Projekt Zugriff gewähren.

edit: ich bin sogar bereit, was kleines springen zu lassen.
 
Last edited:
tja - wenn ich dir jetzt noch sagen würde, das es hier um den Branchenführer im Steuerberatersegment geht, glaubst du doch glatt an garnichts mehr oder? Wenn du magst, kann ich dir mal auf das Github Projekt Zugriff gewähren.

edit: ich bin sogar bereit, was kleines springen zu lassen.
Und warum hat der Branchenführer im Steuerberatungssegment nicht genug Geld, um von Anfang an jemanden zu beauftragen, der sich auskennt?
Kannst ja mal sagen, was du springen lassen würdest und was der Umfang des Projekts ist.
 
Und warum hat der Branchenführer im Steuerberatungssegment nicht genug Geld, um von Anfang an jemanden zu beauftragen, der sich auskennt?
Kannst ja mal sagen, was du springen lassen würdest und was der Umfang des Projekts ist.
ich glaube du verstehst hier was falsch.

imi-tat0r imi-tat0r solltest du Interesse haben, kannst du dich ja mal privat bei mir melden.

kann closed. :)
 
  • Odin Clown
Reactions: .visual
Will jetzt niemanden beleidigen aber ich würde eine Updatesoftware die so entstanden ist wie du das hier beschreibst als gravierendes Sicherheitsrisiko einstufen.
Ne du, Bruder ChatGPT regelt das schon (oder halt auch nicht wie man sieht)
 
  • Like
Reactions: damx
Status
Not open for further replies.