В помощь пользователям КЗК 2
Задача:
Защитить внеш. обработку или отчет с помощью КЗК 2 — передать клиенту с тем что бы он мог ее запустить, но без копирования файла precomp.dll в каталог ИБ.
Так же может применяться и для блоков конфигурации.
- Описание
- Подробнее
Описание
Решение
Использовать разработку:
Размещение двоичных данных в объектах 1С
Посмотреть на «живой» пример можно скачав
//sale.itcity.ru/public/download.php?file=64469
Способ:
1) Обрабатываем файл precomp.dll обработкой из «Размещение двоичных данных в объектах 1С» и получаем файл картинки. Вставляем этот файл в первую таблицу (если их несколько) в внеш. обработке в любое место. Картинка вставляется как объект картинка. Присваиваем ей имя «precomp»
2) Далее обрабатываем код обработки с помощью КЗК 2 получаемзашифрованный код и блок с вызовом загрузки модуля защиты.Например:
// Текст автоматически вставлен при компиляции с помощью «Комплекса защиты конфигурации (версия 2.0)»
Попытка // провека на загруженность компоненты Прекомпилятор, // чтобы избежать зацикливания при окончании срока лицензии Лицензия = СоздатьОбъект(«КЗК2.Лицензия«);Исключение // загрузка компоненты Прекомпилятор Если ЗагрузитьВнешнююКомпоненту(«precomp.dll«) = 0 Тогда // при неудаче вывод предупреждения пользователю Предупреждение(«Компонента прекомпиляции недоступна!«); Иначе // после удачной загрузки создаем внутренний объект компоненты Лицензия = СоздатьОбъект(«КЗК2.Лицензия«); // запускаем служебный метод, который перекомпилирует и перезапустит модуль Лицензия.ПерезапуститьМодуль(); // ВНИМАНИЕ! // Метод ПерезапуститьМодуль() является служебным и предназначен // для вызова только из внешних обработок из стартера скомпилированной обработки. // Самостоятельный вызов этого метода где-нибудь еще может привести к падению 1С:Предприятия КонецЕсли;КонецПопытки;
//[BEGIN COMPILED]//Далее идет закодированный текст модуля
3) в самый верх вставляем код извлечения файла precomp.dll из картинки в каталог ИБ. Текст можно копировать.
// выгрузка компонентов защиты «Комплекса защиты конфигурации (версия 2.0)»Попытка глWSH = СоздатьОбъект(«WScript.Shell«); ИмяФайла = «precomp.dll«; ИдентификаторФайла = «precomp«; РазмерФайла = «61440«; //- это размер файла-картинки из обработки получения картинки Если ФС.СуществуетФайл(КаталогИБ()+ИмяФайла) = 0 Тогда //РаспаковатьBin(ИмяФайла,ИдентификаторФайла,РазмерФайла) КаталогФормы=«»; ИмяФормы=«»; РасположениеФайла(КаталогФормы,ИмяФормы); ИмяВременногоФайла=КаталогИБ()+ИмяФайла; ТекстСкрипта=« |Sub Main | Dim FSO,F | Set FSO = CreateObject(«»Scripting.FileSystemObject»») | Set F = FSO.OpenTextFile(«»»+КаталогФормы+ИмяФормы+»»»,1) | Str = «»»» | BeginFind = 0 | Do | Char = F.Read(1) | Str = Str & Char | If BeginFind = 0 Then | If Right(Str,»+СокрЛП(СтрДлина(ИдентификаторФайла))+»)=»»»+ИдентификаторФайла+»»» Then | BeginFind = 1 | Str = «»»» | End If | Else | If Right(Str,2) = «»BM»» Then | F.Skip(1076) | Str=F.Read(«+СокрЛП(РазмерФайла)+») | F.Close | Set F=FSO.CreateTextFile(«»»+ИмяВременногоФайла+»»») | F.Write(Str) | F.Close | Exit Do | End If | End If | Loop While F.AtEndOfStream=0 |End Sub |»; VBS=СоздатьОбъект(«MSScriptControl.ScriptControl»); VBS.Language=«vbscript»; VBS.Timeout=-1; VBS.AddCode(ТекстСкрипта); VBS.Run(«Main»); КонецЕсли; Исключение глWSH = 0; Сообщить(«> Не удалось создать объект «»WScript.Shell»» |Ничего страшного… можно продолжать работу… |Сообщите Программисту 1C!«,»i«);КонецПопытки;
******************************************
Все. Когда пользователь откроет такую обработку с работает начальный код, который выгрузит из картинки библиотеку и поместит в каталог ИБ. Последующий код найдет, существующий уже, файл precomp.dll и загрузит защиту КЗК 2 в 1С. Далее обработка откроется и защищенный код будет успешно скомпилирован.