Среда выполнения Adobe AIR предотвращает больше чем один экземпляр воздушного приложения, которое будет запущено одновременно. Действительно ли безопасно обойти это ограничение путем произвольного изменения идентификатора издателя? Кто-либо знает, планирует ли Adobe позволить несколько параллельных экземпляров в Воздухе 2.0?
Мы успешно реализовали хакерство, чтобы обойти это ограничение в чистом виде AIR, без изменения идентификатора издателя (для которого, как мне кажется, требуется несколько сертификатов) .
Как вы знаете, AIR реализует свой Mutex с использованием уникального идентификатора приложения.Этот идентификатор вычисляется с использованием идентификатора приложения и идентификатора издателя (извлеченного из сертификата, которым подписано приложение).
В каталоге установки приложения AIR есть папка META-INF (или в / share / в Linux). Эта папка META-INF содержит папку AIR, которая содержит файл «application.xml». Этот файл содержит тег
, который определяет идентификатор приложения, который используется при вычислении идентификатора мьютекса. Если ваше приложение может писать в папке установки, вы можете использовать API File
для редактирования его во время выполнения, произвольно изменяя тег
, что позволяет нескольким процессам одного и того же приложения. работать одновременно.
Это имеет неприятные побочные эффекты, например создание новой папки в папке File.applicationStorageDirectory
каждый раз. Но используя LocalConnection
, вы можете минимизировать это, повторно используя один и тот же идентификатор несколько раз, регистрируя, какие из них можно использовать повторно. Кроме того, в этой папке хранятся SharedObject
, поэтому их нельзя использовать (или их нужно копировать каждый раз, когда создается новый экземпляр и синхронизируется через LocalConnection
).
Насколько мне известно, Adobe не планирует снимать это родное ограничение. Он был реализован для мультиплатформенных целей, в частности, в MacOS, где док-станция усложняет задачу (не очень просто запустить одно и то же приложение дважды с док-станцией).
Официальный способ сделать это - поймать InvokeEvent.INVOKE
и делать такие вещи, как открытие нового окна. И в AIR 2.0 не планируется никаких изменений в этом поведении.
Configuration config = System.Web.Configuration.WebConfigurationManager.OpenWebConfiguration("~");
ConnectionStringsSection section = config.GetSection("connectionStrings") as ConnectionStringsSection;
//section.SectionInformation.UnprotectSection();
section.SectionInformation.ProtectSection("DataProtectionConfigurationProvider");
config.Save();
-121--777919- Поможет ли вам инкапсуляция логики приложения как класса, который может работать в окне и позволять пользователю создавать несколько экземпляров этого окна в одном приложении? поможет ли это?
Какова основная причина, по которой вам потребуется несколько приложений?