Automatisierung der Veröffentlichung von FLA-Dateien; Process.Start mehrmals aufrufen

Problem Hintergrund

Ich habe einen "One-Click" -Veröffentlichungsprozess für meine Flash (* .fla) -Projektdateien mit einem C # -Programm erstellt, das die folgenden Vorgänge ausführt:

Aktualisiert eine statische "Versions" -Variable in zwei Hauptprojektdateien (eine für jedes FLA-Projekt)Ändert eine eingebettete JSFL-Vorlagendatei (automatisiert das Öffnen / Veröffentlichen einer bestimmten FLA-Datei) und schreibt sie zur Verwendung im nächsten Schritt auf die FestplatteRuft Flash Professional über Process.Start auf und übergibt den Pfad zu flash.exe sowie den JSFL-Dateinamen als Argument. Daher führt Flash die JSFL-Datei aus und veröffentlicht das ProjektVeröffentlichung von Projektdateien auf meinem Webserver (einfache Sicherung / Dateikopie über zugeordnetes freigegebenes Laufwerk über Win7 <-> WinServer2012 VPN-Tunnel)

Die Benutzeroberfläche verfügt über drei Schaltflächen, eine zum Veröffentlichen des ersten Projekts, eine zum Veröffentlichen des zweiten Projekts und eine zum Veröffentlichen beider Projekte. Das zweite Projekt hängt vom ersten Projekt ab. Wenn Sie also auf die Schaltfläche "Beide veröffentlichen" klicken, sollte die Veröffentlichung der ersten Datei vollständig abgeschlossen sein, bevor Sie die zweite veröffentlichen.

Für jedes Projekt liest es die AS-Datei der Hauptdokumentklasse als Zeichenfolge in den Speicher und verwendet einen Regex, um bestimmte statische "Versions" -Variablen mit einem aktuellen Zeitstempel zu aktualisieren. Anschließend werden die Dateien mit der aktualisierten Version neu geschrieben. Der Zweck der Variablen "version" besteht darin, zur Laufzeit im Browser angezeigt zu werden. Ich bin mir also sicher, dass ich die zuletzt kompilierte Version des Projekts teste.

Flash Professional akzeptiert einen JSFL-Dateinamen als Befehlszeilenargument, lässt jedoch nicht zu, dass weitere Argumente an diese JSFL-Datei übergeben werden. Daher ändert das Programm eine JSFL-Vorlage, um die richtigen Parameter einzuschließen, und übergibt die angepasste temporäre JSFL-Datei an Flash Professional Process.Start.

Die Veröffentlichung im Web erfolgt über andere generische Funktionen, mit denen ich eine Liste von Quell- und Zielpfaden (mit optionaler zeitgestempelter Sicherung jeder Datei) angeben kann, die die Sicherung und das Kopieren bestimmter veröffentlichter Dateien auf meinen Webserver automatisieren.

Problem

Zuallererst sollte ich erwähnen, dass alles gut funktioniert, wenn ich nur eine Projektdatei veröffentliche und das Problem, das ich zu lösen versuche, das Timing oder die Ereignissignalisierung ist.

Flash ist eine Einzelinstanzanwendung. Wenn Sie Process.Start ausführen, wird Flash Professional entweder gestartet, sofern es nicht bereits ausgeführt wird, und das JSFL-Skript wird ausgeführt, oder das JSFL-Skript wird in der vorhandenen Instanz von Flash Professional ausgeführt.

Das erste Problem ist, dass ich nach dem Aufruf von Process.Start nicht waitForExit aufrufen kann, damit die Aufgabe abgeschlossen wird, da Flash geöffnet bleibt. Wenn Flash bereits geöffnet ist, gibt waitForExit tatsächlich ziemlich schnell zurück, da die 2nd Flash.exe-Instanz geschlossen wird, nachdem der Befehl an die primäre Instanz weitergeleitet wurde. Anwendungen, die nur eine Instanz verwenden, verhindern nicht den Start eines zweiten Prozesses. Sie beenden den zweiten Prozess nur schnell, wenn festgestellt wird, dass einer bereits ausgeführt wird, und leiten den Befehl an diesen weiter. Aus diesem Grund kann ich nicht einfach warten, bis der Prozess beendet ist, da Flash möglicherweise geöffnet ist oder nicht.

Angenommen, ich warte überhaupt nicht, dann ruft meine Anwendung Process.Start ziemlich schnell zweimal auf, und zwar einmal für jedes Projekt. Dabei wird ein eindeutiger JSFL-Skript-Dateiname übergeben, der für jedes Projekt ausgeführt wird. Das Problem dabei ist, dass der erste Anruf offenbar verworfen wird. Ich bin nicht sicher, ob dieses Verhalten auf dem Windows-Betriebssystem oder der Flash Professional-Anwendung beruht. Dies tritt auf, wenn Flash noch nicht geöffnet ist. Der erste Process.Start-Aufruf und die entsprechenden Parameter sollten Flash aktivieren, daher hätte ich erwartet, dass dies gelingt. Beim Start von Flash wird jedoch nur das zweite Skript ausgeführt, wenn das Hauptfenster angezeigt wird.

Wenn Flash bereits gestartet ist, scheinen beide Skripte trotz ihrer schnellen Aktivierung ausgeführt zu werden (ich sehe, dass beide Dokumente in der IDE geöffnet sind), aber die gleichzeitige Veröffentlichung führt tatsächlich zum Absturz von Flash (das Hauptfenster verschwindet und der Prozess wird abrupt ohne Fehler beendet) ).

Ich brauche also eine Möglichkeit, die Ausgabe dieser Process.Start-Befehle zu koordinieren. Zum Glück ist die "Publish" -Methode von JSFL synchron und JSFL kann Befehlszeilenbefehle ausführen. Wenn die Publish-Methode also zurückkehrt, kann ich einfach eine externe EXE-Datei aufrufen, um als Koordinierungsmechanismus zu fungieren und zu erkennen, wann jedes Skript seine Arbeit zuvor abgeschlossen hat den nächsten ausführen? Hat jemand Erfahrung mit dieser Art der prozessübergreifenden Kommunikation, der mir weiterhelfen könnte?

TL; DR

Ich muss wissen, wie man eine einfache ausführbare Datei erstellt, die beim Aufruf über die Befehlszeile eine Nachricht an einen bestimmten externen Prozess sendet, die angibt, dass ein Vorgang abgeschlossen ist. Grundsätzlich muss ein JSFL-Skript, das in Flash Professional ausgeführt wird, die Exe über die aufrufen"undokumentiert" FLfile.runCommandLine Sobald die Veröffentlichung der Datei abgeschlossen ist, muss diese Exe mein Automatisierungsprogramm benachrichtigen, damit Flash weiß, dass die Veröffentlichung der Datei abgeschlossen ist und ein weiteres JSFL-Skript zum Veröffentlichen der nächsten Datei ausgeführt werden kann.

Antworten auf die Frage(1)

Ihre Antwort auf die Frage