![]() |
|
|
|||||
![]() лазил по инету, нашел несколько программ от небольших и непонятный, таких как NSIN до крупных с большим функционалом, таких как Shu. Проблема в том, что большие и официальные программы требуют получение лицензии от Adobe. Нельзя ли обойтись без этого? И вообще какие будут советы и рекомендации?
|
|
|||||
ветеран форума
|
А в чем проблема получить бесплатную лицензию? А Shu в одной из редакций они обходятся без лицензии, но это не совсем легально. Хочется просто собрать инсталлер AIR и air в одну кучку? Как замечали на форумах Adobe, обычный инсталлер с ключом -silent ставится незаметно для пользователя . Если не требуются специфичные только для AIR фичи, можно использовать полноценные средства вроде Zinc, тогда можно работать со съемных носителей без дополнительного софта спокойно.
__________________
4am is time to rock |
|
|||||
Цитата:
Имеются ввиду функции и классы, поддерживаемые AIR'ом и не поддурживаемые Flash Player'ом? Если так, то в моем приложении используются такие классы, например, NativeWindow. |
|
|||||
Регистрация: May 2003
Адрес: Tallinn
Сообщений: 3,181
|
Цитата:
в обычном standalone или браузере всё работает как часы....даже не стал углубляться |
|
|||||
а можно поподробней?
|
|
|||||
Ну выглядит примерно так:
Берем установленное 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. Последний раз редактировалось Skyggedans; 16.10.2009 в 15:53. |
|
|||||
осталось только выложить сам лаунчер
|
|
|||||
Ну хз, некоторые троянов боятся, поэтому и выложил исходник.
Но если че, то вот: http://***********/14581226 Иконку можно поменять любым редактором ресурсов. |
|
|||||
Регистрация: Oct 2005
Адрес: Russia, Irkutsk
Сообщений: 742
|
класс! мегареспект! подскажи чем иконку заменить плз
__________________
smival.com |
![]() |
![]() |
Часовой пояс GMT +4, время: 07:53. |
|
« Предыдущая тема | Следующая тема » |
Опции темы | |
Опции просмотра | |
|
|