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.maxWebOutputsPerCustomerwird 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. FehlendessvgToolkann einen Nullzugriff erreichen. - Fehlend ≠
null≠ leer. Ein vorhandenesnullwird als Blattwert verarbeitet und ist nicht derContainsKey == false-Zweig. Leere/Nullwerte deshalb nicht als universelle Deaktivierung verwenden. Leere Strings scheitern bei Zahlen/Booleans; kurze Adressen können zusätzlichSubstring(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-2565579f5b90a3019b1b49d38438fa105f436fcaedcdaaa0fb463c4f08e8c1629b2. 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-Intaketest-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;Fertigdeaktiviert 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.