Показать сообщение отдельно
Старый 28.05.2008, 09:52
alexcon314 вне форума Посмотреть профиль Отправить личное сообщение для alexcon314 Найти все сообщения от alexcon314
  № 20  
Ответить с цитированием
alexcon314
listener

модератор форума
Регистрация: Jun 2006
Сообщений: 3,260
Записей в блоге: 28
Отправить сообщение для alexcon314 с помощью ICQ
chingachgook, ваша идея с манифестами оказалась действительно плодотворной. РЕГАРДСЫ. Здесь рассказывается о том как собрать приложение с COM, работающее без его регистрации в системе. Привожу так же небольшой отчет о том как я все это реализовал.
Первое, что нужно сделать - убедиться, что на машине, где вы собираете приложение установлен FlashPlayer. При чем обязательно нужно его зарегистрировать в системе
в командной строке:

cd <SystemDir>\system32\Macromed
regsvr32 FlashХХ.ocx

Инсталлятор от адоба почему-то глючит. Обязательно поместить FlashХХ.ocx в указанную папку Macromed.
Создаем Windows C# проект в MSVC 2005. На форму Form1.cs [Design mode] помещаем флэш-компонент. Для этого в тулбоксе на вкладке Components жмем правой кнопкой и Chose Item->COM->ShockwaveFlashObject, затем перетаскиваем его на форму. В окне свойств компонента указываем в поле Movie путь до загружаемого в него swf, если хочется, ставим EmbedMovie=True. Компилим. Запускаем. Работает. Для чистоты эксперимента делаем унинсталл плеера, и обязательно удаляем FlashXX.ocx. Запускаем ехе, любуемся окном с сообщением об ошибке - НЕ РАБОТАЕТ!

Ставим плеер обратно, регим его в системе. Только после этого (!) открываем наш проект MS VС (иначе заглючит design mode]. Идем в Solution Explorer, открываем наш проект, находим папочку Reference, а в ней (внимание!) два файла: AxShockwaveFlashObject и ShockwaveFlashObject. Кликаем на любом из них и в окне его свойств ставим Isolated=true (вот оно!). То же со вторым. Компилим. Закрываем MS VC. Сносим плеер, не забывая удалить .ocx. Запускаем. РАБОТАЕТ!

Вообще, сносить плеер с вычищением реестра и прочими предосторожностями не обязательно. Достаточно убрать из виду FlashXX.ocx, переместив его в другую папку, например. Ну тут дело вкуса. Лучше, конечно, иметь под рукой чистую машину для тестов.
При компиляции с Isolated=true рядом с ехе появятся вдруг откуда ни возьмись FlashXX.ocx и, собственно, сам манифест. Это компилятор постарался. Наличие этих файлов по-соседству с ехе, сами понимаете, гвоздь программы. Без любого из них ехе не запустится. Кроме них еще два важных файла AxInterop.ShockwaveFlashObjects.dll и Interop.ShockwaveFlashObjects.dll. Они тоже генерируются автоматически при вставке компонента на форму.

Пользоваться таким способом сборки приложений надо осмотрительно. Можно нарваться на проблемы с лицензированием внедряемого контрола. Кроме того, вся эта канитель будет работать только под Windows не ниже XP PRO SP2. При этом в системе должен быть установлен .NET Framework 2.0.
Цинк, кстати работает и под 98-мым.
Скомпилированный проект выложил здесь. (~1.5Mb) Работает без установленного плеера. Внедряется 9-ый плеер. Мув зашит в ехе.
http://mdm-zinc.narod.ru/CS/CSF.zip

В Delphi повторить такое, думаю, реально.


Последний раз редактировалось alexcon314; 28.05.2008 в 09:58.