Ja, stimmt. Hab übersehen, dass die Einträge oben Teil der Liste sind.
... oder nur c:\foo - denn das ist die gemeinsame Basis.
Aber genau das wäre doch die Lösung für Dein Problem:
Die exe setzt die Variable(n) und ruft dann per cmd die Batch-Datei auf, die alle geänderten Umgebungsvariablen erbt.
s. z.B. hier Template SerialPort
Aber auch die Doku :rtfm: zu SerialPort ist hilfreich.
Schließlich wirst Du hier im Forum zu diesem Thema auch einiges finden.
Z.B. wenn ich auf eine bestimmte Anzahl von Daten im Receive-Buffer des Com-Ports warte, soll die Warteschleife nach 500ms abgebrochen werden.
Dafür gibt es bspw. die Eigenschaft "ReadTimeout" der SerialPort-Klasse.
Etwas wie "Warteschleifen" solltest Du auch nicht verwenden. Im Unterschied zur Mikrocontroller-Programmierung gehört der Prozessor nicht nur einer Anwendung oder einem Vorgang (Thread). Stattdessen erfolgt die Entwicklung eher "ereignisgesteuert" (wenn eine Aktion durch die GUI ausgelöst wird, wenn ein IO-Vorgang beendet ist [erfolgreich oder fehlgeschlagen]).
Die variablen, die dann beim random ausgegeben werden sind alle gleich ( manchmal ist eine anders ) .
Dein Fehler ist ja in erster Linie dass Du sehr schnell hintereinander neue Random-Instanzen erzeugst. Du brauchst hier ohnehin nur eine. Ich nehme an, den Link von DMDoniz hast Du nicht gelesen?
Trotzdem kann es natürlich vorkommen, dass mehrfach "zufällig" die selbe Zahl gewürfelt wird. Das musst Du also prüfen und neu würfeln.
Dann steck die Schleife mal in einen try/catch Block und lass Dir Exceptions ausgeben.
Habe nun festgestellt, dass er eine schon fertige Datei nochmals neu schreibt. Obwohl diese bereits schon fertig ist.
Dann verwende den Debugger oder Logging, um den gesamten Ablauf nachzuvollziehen. Ist denn z. B. die ReadFiles übergebene Liste korrekt?
Wo genau steht denn das Programm, wenn es hängt?
Das kann eine Reihe von Gründen haben - s. [FAQ] Programm läuft in anderer Umgebung nicht (richtig)