Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   Flash Приложения: AIR, Zinc и тд. (http://www.flasher.ru/forum/forumdisplay.php?f=94)
-   -   AIR to EXE. How to? (http://www.flasher.ru/forum/showthread.php?t=131129)

Peregrin 13.10.2009 17:17

AIR to EXE. How to?
 
лазил по инету, нашел несколько программ от небольших и непонятный, таких как NSIN до крупных с большим функционалом, таких как Shu. Проблема в том, что большие и официальные программы требуют получение лицензии от Adobe. Нельзя ли обойтись без этого? И вообще какие будут советы и рекомендации?

DarkLight 13.10.2009 17:32

А в чем проблема получить бесплатную лицензию? А Shu в одной из редакций они обходятся без лицензии, но это не совсем легально. Хочется просто собрать инсталлер AIR и air в одну кучку? Как замечали на форумах Adobe, обычный инсталлер с ключом -silent ставится незаметно для пользователя . Если не требуются специфичные только для AIR фичи, можно использовать полноценные средства вроде Zinc, тогда можно работать со съемных носителей без дополнительного софта спокойно.

Peregrin 13.10.2009 17:41

Цитата:

Сообщение от DarkLight (Сообщение 857465)
Как замечали на форумах Adobe, обычный инсталлер с ключом -silent ставится незаметно для пользователя

а можно поподробней про этот инсталлер и как ставить ключ?
Цитата:

Сообщение от DarkLight (Сообщение 857465)
Если не требуются специфичные только для AIR фичи

Имеются ввиду функции и классы, поддерживаемые AIR'ом и не поддурживаемые Flash Player'ом? Если так, то в моем приложении используются такие классы, например, NativeWindow.

CrazyFlasher 13.10.2009 17:48

Цитата:

Если не требуются специфичные только для AIR фичи, можно использовать полноценные средства вроде Zinc
я забил на zink...моя флэшка имела сложную структуру с разными ApplicationDomain и SecurityDoman + подгружали разные swf либы...после цинка становилась не рабочей.

в обычном standalone или браузере всё работает как часы....даже не стал углубляться

Skyggedans 14.10.2009 14:00

Я писал лаунчер для запуска AIR-прилады без инсталляции рантайма - он просто рядом лежит. Можно с любого сменного носителя запускать.

Peregrin 15.10.2009 11:31

Цитата:

Сообщение от Skyggedans (Сообщение 857734)
Я писал лаунчер для запуска AIR-прилады без инсталляции рантайма - он просто рядом лежит. Можно с любого сменного носителя запускать.

а можно поподробней?

Skyggedans 16.10.2009 15:49

Цитата:

Сообщение от Peregrin.ru (Сообщение 857992)
а можно поподробней?

Ну выглядит примерно так:
Берем установленное AIR-приложение, туда копируем мой экзешник, а из каталога установки AIR копируем Abobe AIR.dll и папку Resources (на самом деле достаточно наличия в ней WebKit.dll и NPSWF32.dll). Теперь достаточно запустить лаунчер и прога будет работать на локальной копии рантайма.
А работает лаунчер так:
Сначала проверяет наличие файла %USERPROFILE%\Application Data\Adobe\AIR\eulaAccepted - его наличие означает что юзверь подтвердил пользовательское соглашение (без него ничего работать не будет), если файла нет - создает его.
Потом вызывает точку входа в Adobe AIR.dll - AppEntryWinMain(). Первый параметр - хэндл экзешника(самого лаунчера), второй - хэндл ДЛЛ-ки.
Короче, вот код на Делфе:
Код:

program AIR;

uses
    Windows, SysUtils, ShlObj;

{$R *.RES}

var
    AppEntryWinMain: procedure(exeHandle, dllHandle: HMODULE); stdcall;
    SetDllDirectory: function(lpPathName: PAnsiChar): LongBool; stdcall;
    dllHandle: HMODULE;
    appDataPath: array[1..MAX_PATH] of Char;
    airDir, eulaAcceptedFile: string;

const
    CSIDL_APPDATA = $001A;

begin
    Set8087CW($133F);

    SHGetSpecialFolderPath(0, PAnsiChar(@appDataPath), CSIDL_APPDATA, False);
    airDir := StrPas(@appDataPath) + '\Adobe\AIR';
    eulaAcceptedFile := airDir + '\eulaAccepted';
    if not FileExists(eulaAcceptedFile) then begin
        if not DirectoryExists(airDir) then
            ForceDirectories(airDir);
        CloseHandle(CreateFile(PAnsiChar(eulaAcceptedFile), GENERIC_READ, FILE_SHARE_READ,
            nil, OPEN_ALWAYS, FILE_ATTRIBUTE_NORMAL, 0));
    end;

    dllHandle := GetModuleHandle(PAnsiChar('kernel32'));
    if dllHandle <> 0 then begin
        @SetDllDirectory := GetProcAddress(dllHandle, PAnsiChar('SetDllDirectoryA'));
        if Assigned(SetDllDirectory) then begin
            SetDllDirectory(PAnsiChar(ExtractFilePath(ParamStr(0))));
            SetDllDirectory(PAnsiChar(ExtractFilePath(ParamStr(0)) + '\Resources'));
        end;
    end;
    dllHandle := LoadLibrary(PChar('Adobe AIR.dll'));
    if dllHandle <> 0 then begin
        @AppEntryWinMain := GetProcAddress(DllHandle, PChar('AppEntryWinMain'));
        if Assigned(AppEntryWinMain) then
            AppEntryWinMain(GetModuleHandle(nil), dllHandle);
        FreeLibrary(dllHandle);
    end;
end.

Надо заметить, что эта штука нарушает как минимум два пункта лицензии на редистрибуцию AIR - обход процедуры установки, и обход показа пользователю и подтверждение им EULA. Но для нужд небольшой компании сойдет.

Peregrin 20.10.2009 00:20

осталось только выложить сам лаунчер

Skyggedans 20.10.2009 01:48

Цитата:

Сообщение от Peregrin.ru (Сообщение 859085)
осталось только выложить сам лаунчер

Ну хз, некоторые троянов боятся, поэтому и выложил исходник.
Но если че, то вот:
http://***********/14581226
Иконку можно поменять любым редактором ресурсов.

$mival 28.10.2009 23:36

класс! мегареспект! подскажи чем иконку заменить плз


Часовой пояс GMT +4, время: 16:41.

Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.