Zum Inhalt

Globale Einstellungen: generalSettings.json

Die globale JSON-Datei steuert alle Kunden: Mail, Überwachungsintervalle, Wandlungsgrenzen, Startverhalten und SVG-Werkzeug. Kundenpfade, Bildgrößen und Ausgabeformate stehen dagegen in der Kunden-JSON.

Gültigkeit: Herstellerhandbuch ImageConvert-4.pdf, 09.10.2026, und statischer C#-Quellstand mit Revisionsliteral 20261013. Die folgenden Initialwerte sind aus diesem Reader belegt, nicht aus einer installierten EXE oder einem Programmlauf. Die 15 Felder sind die tatsächlich gelesenen globalen Felder dieses Quellstands; dies ist kein allgemeines JSON Schema.

Datei finden und Daten ansehen

Das Handbuch nennt JsonGeneral unter dem Programmverzeichnis und erlaubt einen beliebigen Dateinamen mit Endung .json. Der gelesene Reader verwendet genauer Application.StartupPath + Settings\JsonGeneral\. Er sucht nur im obersten Ordner nach *.json und liest files[0], ohne zu sortieren oder einen festen Namen zu prüfen. generalSettings.json ist daher ein Konventionsname, kein im Reader erzwungener Dateiname. Mehrere JSON-Dateien erzeugen eine nicht ausdrücklich bestimmte Auswahl: Sicherungen gehören außerhalb des eingelesenen Ordners. Keine Datei führt zum Abbruch; ein fehlender Ordner ist ebenfalls kein Defaultbetrieb. Die Fehlermeldung nennt verkürzt JsonGeneral, obwohl der Zugriff Settings\JsonGeneral\ verwendet. [S1: 248–286; M: PDF-S. 13 / gedruckt 9]

Die Kundendateien werden separat aus Application.StartupPath + Settings\JsonKunden\ gelesen. Ein Feldpfad wie mail.fromAddress beginnt direkt im Wurzelobjekt der globalen Datei. Es gibt keinen zusätzlichen JSON-Container generalSettings. [S1: 120–121, 204, 444–484]

Vor Beginn der Wandlung: Im Hauptfenster unter Eingabedaten ansehen → Allgemein die eingelesenen Werte ansehen. Der Dialog ist keine unterstützte Speicheroberfläche: Fertig ist deaktiviert, der Schreibaufruf und die Speicherroutine sind auskommentiert. Einzelne Eingabefelder können optisch bearbeitbar wirken, ohne dass dies eine Speicherung belegt. Nach Start sind die Ansichtsschaltflächen deaktiviert. [M: PDF-S. 22–23 / gedruckt 18–19; S2: 16–36, 43–52, 267–298; S3: 335–342; S1: 2025–2027, 2740–2744]

Änderungen nur im abgestimmten Betriebsablauf an der richtigen Datei vornehmen und über den vorgesehenen Neustart einlesen; der globale Reader läuft in der Startinitialisierung, nicht als laufender Dateiwächter. Siehe Konfiguration sicher bearbeiten und aktivieren, CFG-14: Daten ansehen und CFG-15: Syntaxprüfung. Hier wird keine Änderung oder Ausführung ausgelöst.

Typen, Pflichtstatus und fehlende Werte

Der Reader parst mit Newtonsoft JToken, flacht Blattwerte über token.ToString() in ein Dictionary<string,string> ab und konvertiert dann. Deshalb unterscheiden die Tabellen empfohlenen JSON-Typ und tatsächlichen C#-Zieltyp. bool.Parse liest Booleantext, Convert.ToInt32 einen vorzeichenbehafteten 32-Bit-Integertext. Auch ein passend formatierter String kann diese Konvertierungen erreichen; das ist kein Grund, Zahlen und Booleans in neuen Dateien als Strings zu schreiben. Dezimalwerte, Überläufe und ungültiger Booleantext haben keinen dokumentierten sicheren Fallback. [S1: 67, 261–263, 468–484, 8125–8141]

  • Pflicht: counter.maxWebOutputsPerCustomer wird ausdrücklich auf Vorhandensein geprüft. Die übrigen 14 Schlüssel werden nur bei Vorhandensein übernommen.
  • Optional im Reader heißt nicht betriebsfähig beim Weglassen. Beispielsweise werden die initialen Mailwerte no:: später von der Adressprüfung wegen fehlendem @/Punkt beanstandet. Fehlendes svgTool kann einen Nullzugriff erreichen.
  • Fehlend ≠ null ≠ leer. Ein vorhandenes null wird als Blattwert verarbeitet und ist nicht der ContainsKey == false-Zweig. Leere/Nullwerte deshalb nicht als universelle Deaktivierung verwenden. Leere Strings scheitern bei Zahlen/Booleans; kurze Adressen können zusätzlich Substring(0,4) verletzen. Ein Objekt statt eines Blattwerts erzeugt andere Pfade und erfüllt den erwarteten Schlüssel nicht.
  • Explizit vor jedem Einlesen gesetzte Initialwerte und bloße C#-Feldinitialisierung beim frischen Prozessstart sind unten getrennt. Ein Beispielwert aus dem Handbuch ist kein Default.

Mail

Alle Pfade dieser Tabelle gehören zum Objekt mail. O = im Reader optional, nicht automatisch ohne weitere Konfiguration nutzbar.

Pfad JSON → C# Pflicht Initialwert bei fehlendem Key Akzeptierter Inhalt und Wirkung Source
mail.fromAddress String → string? O explizit "no::" Absender. Exaktes kleingeschriebenes Präfix no:: unterdrückt den globalen Sendepfad, einschließlich Adminmail. Adressprüfung verlangt trotzdem @ und Punkt; daher vollständige deaktivierte Beispieladresse statt nur leer/no::. S1: 444–461, 1245–1250, 6425–6435
mail.ccAddress String → string? O explizit "no::" Globale CC-Adresse. no:: unterdrückt diese CC, nicht den übrigen Versand. Dieselbe spätere @-/Punktprüfung. S1: 463–464, 1252–1257, 6437
mail.adminAddress String → string? O explizit "no::" Laut Handbuch Adresse für Systemmeldungen; no:: als deaktivierte Adresse. Im gelesenen Source nur Übernahme und Adressprüfung belegt, keine Zuweisung an kundeEmail[0] für Sendmsg(0,...). Der dokumentierte Adminempfang ist damit hier nicht als funktionsfähig nachgewiesen. S1: 465–466, 1259–1264; M: PDF-S. 13, 22
mail.mailServer String → string? (mailserver) O null durch C#-Feldinitialisierung SMTP-Hostname für Connect; kein SMTP-Benutzername. Nur gültiger zur Installation gehöriger Host bei separat autorisiertem Versand. S1: 24, 467, 6450
mail.mailPort Ganzzahl oder Integerstring → Int32 O 0 durch C#-Feldinitialisierung SMTP-Port; Handbuch zeigt einen String, Reader konvertiert zu Integer. Kein validierter globaler Portbereich im Einlesezweig; Konvertierbarkeit allein garantiert keine SMTP-Nutzbarkeit. S1: 52, 470, 6450
mail.mailPassword String → string? O null durch C#-Feldinitialisierung Geheimes SMTP-Passwort für Authenticate. Nur geschützt verwalten, nie in Dokumentation, Dumps oder Tickets übernehmen. S1: 25, 469, 6452

SMTP-Sicherheitsgrenze

Der konkrete Source verbindet mit SecureSocketOptions.StartTls, nicht mit einem konfigurierbaren Authentifizierungsmodus. Er ruft Authenticate(mailServer, mailPassword) auf. mailserver und mailServer sind verschiedene C#-Variablen: Der JSON-Key mail.mailServer befüllt nur mailserver (Host). Für mailServer als Authentifizierungsname gibt es im globalen Reader keinen eigenen Key und keine Zuweisung; der alte nicht unterstützte Dialog-Closinghandler weist ihm sogar den Porttext zu. Daher weder einen username-Key erfinden noch den Host zum Login umdeuten. Das ist ein konkreter Implementierungsbefund, keine bloß fehlende Handbuchangabe. [S1: 24–25, 467, 6450–6452; S2: 118–121]

Quellstand kann Mailpasswörter in Logs schreiben

Der Exceptionpfad schreibt das Passwort im Klartext in die Programm-Logdatei. Logs und Konfigurationsdumps deshalb als potentiell geheim behandeln und niemals ungeprüft weitergeben. Diese Referenz ist keine Freigabe für Mailversand und weist keine sichere SMTP-Funktion einer installierten Version nach. [S1: 6456–6459]

Sicheres reines Dokumentationsfragment, keine vollständige globale Datei und keine Aufforderung zum Übernehmen:

{
  "mail": {
    "fromAddress": "no::sender@example.invalid",
    "ccAddress": "no::cc@example.invalid",
    "adminAddress": "no::admin@example.invalid",
    "mailServer": "smtp.example.invalid",
    "mailPort": "587",
    "mailPassword": "NICHT_EINTRAGEN"
  }
}

.invalid ist eine reservierte Beispieldomain; 587 ist hier nur ein Beispiel, nicht der Programmstandard. Die Absendersperre ist der dokumentierte Deaktivierungsweg; ein Fragment ist dennoch keine Garantie für einen beliebigen anderen Programmstand. Kundenspezifisches customerMail.customerAddress ist kein globales Feld. Weiter: CFG-01: Mail, CFG-02: Authentifizierung.

Intervalle und Grenzen

Die Felder gehören zum Objekt counter. Ganzzahlen werden als Int32 gelesen; die exakte allgemeine Konvertierungsgrenze ist −2147483648 bis 2147483647, nicht ein zulässiger Betriebsbereich. Für Timer sind positive Millisekunden erforderlich; 0 ist kein belegter Abschaltwert. Für Dimensionierungen und Wandlungsgrenzen sinnvolle positive Werte wählen; der Reader erzwingt hier kein vollständiges fachliches Schema.

Pfad JSON → C# Pflicht Initialwert bei fehlendem Key Wirkung / Einschränkung Source
counter.intervalMs Ganzzahl → Int32 (ttimer1) O explizit 5000 ms Such-/Wandlungstimer. Handbuchbeispiel 1000 ms ist nicht dieser Initialwert. Timer wird beim Start auf diesen Wert gesetzt. Kein Echtzeitversprechen für jede Datei. S1: 477–478, 6472–6473
counter.intervalMs2 Ganzzahl → Int32 (ttimer2) O explizit 120000 ms Zweiter Timer und Schwellwert Zeit seit lastconvert > ttimer2. Kein folgenloser Statuszähler: Timeoutpfad kann Photoshop beenden, die aktuelle Datei nach error verschieben und IC neu starten/beenden. S1: 479–480, 6474–6475, 7013–7062
counter.maxConversions Ganzzahl → Int32 (maxconv) O explizit 1000 Neustartprüfung vor der nächsten Verarbeitung anhand ohneFehler + ohneFehler_v >= maxconv (erfolgreiche Bild-/Videowandlungen). Nicht Zahl der erzeugten Webdateien und nicht schlicht alle Fehlerfälle. S1: 481–482, 2983–2988
counter.maxConversionsPerCustomer Ganzzahl → Int32 (nChangeKunde) O explizit 25 Fairness beim Abarbeiten eines Kunden: gewandelt++, dann Abbruch des aktuellen Durchlaufs bei gewandelt > nChangeKunde. Kein dauerhaftes Kundenkontingent; nicht alle gezählten Dateikandidaten müssen erfolgreiche Wandlungen sein. S1: 483–484, 2974–2979
counter.maxWebOutputsPerCustomer Ganzzahl → Int32 (maxWebCount) ja keiner, fehlender Key führt zum Abbruch Dimensioniert gemeinsame interne Arrays, keine Aktivierung von Outputs. Arrays verwenden maxWebCount + 1; Webschleife startet bei Index 5 und prüft i >= maxWebCount. Deshalb nicht pauschal mit der exakten nutzbaren Zahl der Webeinträge gleichsetzen. Zu knapp führt zum Abbruch. S1: 279–290, 1038–1055

Dimensionierungsfalle: Alte Dialoglogik zeigt den rohen maxWebCount, rechnet im Closinghandler aber +4; diese Logik ist keine verbindliche Umrechnung für neue JSON-Werte und die Speicherfunktion ist deaktiviert. Den Wert nicht aus dieser Dialogarithmetik neu ableiten. [S2: 18, 127, 267–298]

Weiter: CFG-03: Suchintervall, CFG-04: Hänge-Timer/Startverzögerung, CFG-05: Restart, CFG-06: Kundenwechsel, CFG-07: Dimensionierung, MON-01: Monitor.

Start, Photoshop und SVG

Pfad JSON → C# Pflicht Initialwert bei fehlendem Key Akzeptierter Inhalt und Wirkung Source
other.startDelay Ganzzahl → Int32 O 0 ms, C#-Feldinitialisierung Millisekunden; im ersten Wandlungstimerdurchlauf einmal Thread.Sleep(startDelay), nicht vor jedem Bild. Für Betrieb nichtnegativ wählen; -1 würde bei Thread.Sleep unendlich warten und ist kein sinnvoller Abschaltwert. S1: 52, 468, 2768–2774
other.showPhotoshopWindow Boolean → bool (bvisible) O false, C#-Feldinitialisierung true zeigt Photoshop, false blendet das Fenster aus (appRef.Visible). Kein Schalter für interaktive Photoshop-Dialoge: DisplayDialogs wird separat auf psDisplayNoDialogs gesetzt. S1: 49, 476, 1957–1958
other.startConversionImmediately Boolean → invertiertes bool (allowedit) O effektiv false, da allowedit = true true setzt allowedit=false und startet ohne vorherige Datenansicht; false lässt den manuellen Start zu. Startargument yes hat Vorrang und erzwingt allowedit=false, unabhängig von fehlendem/gesetztem Key. S1: 202, 472–475, 2020–2027
other.svgTool String → string? O im Reader; für SVG explizit setzen null, C#-Feldinitialisierung; kein belegter sicherer Tooldefault Unterstützte Namen laut Handbuch/Dialog: inkscape, mutool, Vergleich im Verarbeitungszweig ohne Beachtung der Groß-/Kleinschreibung. Fehlt die Inkscape-EXE, wird mutool gewählt. Andernfalls erzwingt mutool mutool, inkscape Inkscape; andere Strings können den exakten Eingangsunterpfad mutool auswerten. Das ist kein dokumentierter zusätzlicher Enumwert. Fehlendes/null Tool kann .Equals auf null erreichen. S1: 23, 471, 7345–7351; S3: 426

Die SVG-Wahl installiert kein Werkzeug und definiert keinen EXE-Pfad. Inkscape wird im Source unter c:\Programme\Inkscape gesucht; dessen Vorhandensein beeinflusst die Auswahl. Eine vollständige Inkscape-/mutool-Installation ist hier nicht nachgewiesen. [S1: 124–139]

Weiter: CFG-08: Photoshop sichtbar, CFG-09: Sofortstart, CFG-10: SVG-Werkzeug, SYS-01: Start/Überwachung, SYS-02: Photoshop, SYS-03: Vektorwerkzeuge, Programmüberblick.

Quellen und konkrete Abweichungen

  • M: Herstellerhandbuch ImageConvert-4.pdf, Revision 09.10.2026, SHA-256 5579f5b90a3019b1b49d38438fa105f436fcaedcdaaa0fb463c4f08e8c1629b2. PDF-S. 13 / gedruckt 9: globale Beispielstruktur mit allen 15 Feldern und Ordnerbeschreibung; PDF-S. 22–23 / gedruckt 18–19: no::, lesende Dialoge. Herstellerbeispiele wurden nicht mit ihren Adressen/Passwörtern übernommen.
  • S1: IC/Form1.cs, unter dem vorhandenen Source-Intake test-runs/complete-prep-20261009/full-suite/jakob-project-sources/intake/extracted/. Revisionsliteral Zeile 164: 20261013. Zeilen beziehen sich ausschließlich auf diese statische Datei, nicht auf eine installierte EXE.
  • S2: IC/Eingabe_Allgemein.cs, gleicher Intake; Einlesen des Dialogmodells, nicht unterstützte Closing-/Speicherreste.
  • S3: IC/Eingabe_Allgemein.Designer.cs, gleicher Intake; Fertig deaktiviert und zwei Toolnamen.

Die wichtigsten Unterschiede sind somit konkret geklärt: Settings-Unterordner vs. verkürzte Handbuchablage, 5000-ms-Initialwert vs. 1000-ms-Beispiel, optionale Keys vs. betriebsuntaugliche Null-/Adressinitialwerte, Mailhost vs. ungebundener Authentifizierungsname, rohe Arraydimension vs. Zahl tatsächlich nutzbarer Webausgänge. Kein zusätzliches username-/authMode-Feld, kein pauschaler SVG-Default und kein editierbarer Speicherdialog werden daraus erfunden.