![]() |
|
||||||||||
|
|||||
|
лазил по инету, нашел несколько программ от небольших и непонятный, таких как NSIN до крупных с большим функционалом, таких как Shu. Проблема в том, что большие и официальные программы требуют получение лицензии от Adobe. Нельзя ли обойтись без этого? И вообще какие будут советы и рекомендации?
|
|
|||||
|
ветеран форума
|
А в чем проблема получить бесплатную лицензию? А Shu в одной из редакций они обходятся без лицензии, но это не совсем легально. Хочется просто собрать инсталлер AIR и air в одну кучку? Как замечали на форумах Adobe, обычный инсталлер с ключом -silent ставится незаметно для пользователя . Если не требуются специфичные только для AIR фичи, можно использовать полноценные средства вроде Zinc, тогда можно работать со съемных носителей без дополнительного софта спокойно.
__________________
4am is time to rock |
|
|||||
|
Цитата:
Имеются ввиду функции и классы, поддерживаемые AIR'ом и не поддурживаемые Flash Player'ом? Если так, то в моем приложении используются такие классы, например, NativeWindow. |
|
|||||
|
Регистрация: May 2003
Адрес: Tallinn
Сообщений: 3,182
|
Цитата:
в обычном 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, время: 09:37. |
|
|
« Предыдущая тема | Следующая тема » |
|
|