Мы успешно внедрили хак, чтобы обойти это ограничение в чистом виде в AIR, не меняя идентификатор издателя (которому, как мне кажется, требуется несколько сертификатов).
Как вы знаете, AIR внедряет свой Mutex, используя уникальный идентификатор приложения. Этот идентификатор рассчитывается с использованием идентификатора приложения и идентификатора издателя (извлекается из сертификата, подписавшего приложение).
В каталоге установки приложения AIR находится папка META-INF (или в / share / using Linux). Эта папка META-INF содержит папку AIR, в которой находится файл application.xml. Этот файл содержит тег <id />
, который определяет идентификатор приложения, который используется при вычислении идентификатора мьютекса. Если ваше приложение может записывать в папку установки, вы можете использовать API File
для его редактирования во время выполнения, произвольно изменяя тег <id />
, позволяя одновременно запускать несколько процессов одного приложения.
Это имеет некоторые раздражающие побочные эффекты, такие как создание новой папки в папке File.applicationStorageDirectory
каждый раз. Но, используя LocalConnection
, вы можете минимизировать это, многократно используя один и тот же идентификатор, регистрируя, какие из них можно использовать повторно. Кроме того, SharedObject
хранятся в этой папке, поэтому не могут использоваться (или должны копироваться каждый раз, когда создается новый экземпляр, и синхронизируются, хотя LocalConnection
).
Насколько я знаю, Adobe не планирует снимать это собственное ограничение. Он был реализован для мультиплатформенных целей, особенно в MacOS, где док-станция делает это более сложным (не так легко запустить одно и то же приложение дважды с помощью док-станции).
Официальный способ сделать это - поймать событие InvokeEvent.INVOKE
и делать что-то вроде открытия нового окна. И в этом поведении не планируется никаких изменений для AIR 2.0.