Автоматизация публикации FLA-файлов; вызывая Process.Start несколько раз

Проблема фона

Я создал процесс публикации в один клик для моих файлов проекта Flash (* .fla) с помощью программы на C #, которая выполняет следующие операции:

Обновляет статическую переменную «версия» в двух основных файлах проекта (по одному для каждого проекта FLA)Изменяет встроенный файл шаблона JSFL (автоматизирует открытие / публикацию определенного FLA-файла) и записывает его на диск для использования в следующем шагеВызывает Flash Professional через Process.Start, передавая путь к flash.exe и имя файла JSFL в качестве аргумента, поэтому flash запускает файл JSFL и публикует проектПубликует файлы проекта на моем веб-сервере (простое резервное копирование / копирование файлов через подключенный общий диск через Win7 <-> WinServer2012 VPN-туннель)

Пользовательский интерфейс имеет три кнопки: одну для публикации первого проекта, одну для публикации второго проекта и одну для публикации обоих проектов. Второй проект зависит от первого проекта, поэтому, если и когда нажата кнопка «опубликовать оба», он должен полностью завершить публикацию первого файла перед публикацией второго.

Для каждого проекта он считывает файл AS основного документа в память в виде строки и использует регулярное выражение для обновления определенных статических переменных «версия», чтобы иметь текущую временную метку. Затем он перезаписывает файлы с обновленной версией. Назначение переменной version - это отображение во время выполнения в браузере, поэтому я уверен, что я тестирую самую последнюю скомпилированную версию проекта.

Flash Professional принимает имя файла JSFL в качестве аргумента командной строки, но не позволяет передавать дополнительные аргументы в этот файл JSFL, поэтому программа изменяет шаблон JSFL для включения соответствующих параметров и передает настроенный временный файл JSFL во Flash Professional через Process.Start.

Публикация в Интернете происходит с помощью других общих функций, которые позволяют мне указать список исходных и целевых путей (с необязательной резервной копией каждого файла с отметкой времени), которые автоматизируют резервное копирование и копирование определенных опубликованных файлов на мой веб-сервер.

проблема

Прежде всего, я должен отметить, что все работает нормально, когда я публикую только один файл проекта, и проблема, которую я пытаюсь решить, связана с синхронизацией или передачей событий.

Flash - это приложение только для одного экземпляра, поэтому при запуске Process.Start Flash Professional запускается, если он еще не запущен, и запускается сценарий JSFL, либо сценарий JSFL запускается в существующем экземпляре Flash Professional.

Первая проблема - после вызова Process.Start, я не могу вызвать waitForExit для завершения задачи, потому что Flash остается открытым. Если Flash уже открыт, waitForExit на самом деле возвращается довольно быстро, потому что второй экземпляр Flash.exe закроется после пересылки команды первичному экземпляру. Приложения, предназначенные только для одного экземпляра, на самом деле не препятствуют запуску второго процесса, они просто быстро завершают второй процесс, когда он обнаруживает, что один уже запущен, и передает ему команду. По этой причине я не могу просто ждать завершения процесса, так как Flash может открываться или не открываться.

Предполагая, что я совсем не жду, мое приложение будет довольно быстро вызывать Process.Start дважды, по одному разу для каждого проекта, передавая уникальное имя файла сценария JSFL для запуска для каждого. Проблема в том, что первый вызов, похоже, отбрасывается. Я не уверен, коренится ли это поведение в ОС Windows или в приложении Flash Professional. Это происходит, когда Flash еще не открыт. Первоначальный вызов Process.Start и соответствующие параметры должны быть тем, что активирует Flash, поэтому я ожидал, что это будет сделано, однако при запуске Flash, когда он, наконец, отображает главное окно, запускается только 2-й сценарий.

Интересно, что, если Flash уже запущен, оба сценария запускаются, несмотря на их быструю активацию (я вижу, что оба документа открыты в IDE), но одновременная публикация фактически приводит к сбою Flash (основное окно исчезает, и процесс завершается внезапно без каких-либо ошибок. ).

Поэтому мне нужен способ координировать выдачу этих команд Process.Start. К счастью, метод «публикации» JSFL является синхронным, и JSFL способен выполнять команды командной строки, поэтому, возможно, когда метод публикации вернется, я могу просто вызвать некоторый внешний EXE-файл, чтобы он функционировал как механизм координации, чтобы определить, когда каждый сценарий завершил свою работу до этого. выполнение следующего? Есть ли у кого-нибудь опыт такого рода межпроцессного взаимодействия, который мог бы мне помочь?

TL; DR

Мне нужно знать, как создать простой исполняемый файл так, чтобы при вызове из командной строки он отправлял сообщение определенному внешнему процессу, указывающее, что операция завершена. По сути, JSFL-скрипт, работающий во Flash Professional, должен вызывать exe через«Без документов» FLfile.runCommandLine метод, как только файл завершил публикацию, и этот exe должен затем уведомить мою программу автоматизации, чтобы он знал, что Flash завершил публикацию файла и готов запустить другой сценарий JSFL для публикации следующего файла.

Ответы на вопрос(1)

Ваш ответ на вопрос