Имя: Пароль:
1C
 
Горячая замена конфигурации 7.7: md_chng.dll
0 romix
 
модератор
21.04.06
02:51
Продолжим тему с перехватом WinAPI и функций DLL.

Файл для скачивания: http://x-romix.narod.ru/MD_CHANGER.rar (52К, ссылка доступна для скачивания левой кнопкой мыши).

Программа для "горячей" замены конфигурации без необходимости завершать работу всех пользователей. Достаточно скопировать в папку с конфигурацией файл 1cv7_1.md, 1cv7_2.md и т.д., чтобы вновь входящие пользователи "видели" новый (последний по номеру) MD в качестве файла конфигурации.

Пользователь, который хочет увидеть изменения, должен будет выйти и заново войти в 1С. Таким способом можно заменить, например, глобальный модуль, общие таблицы, картинки, интерфейсы (меню и т.д.), перечисления, отчеты и обработки. Другие пользователи при этом могут продолжать свою работу в 1С.

Дополнительная функция: если в папке с конфигурацией есть файл 1cv7.stop, то вход пользователей задерживается, пока существует этот файл. И пользователь видит сообщение из содержимого этого файла. Например, "База 1С обновляется. Пожалуйста, подождите до 13:00".

Если ни одного из вышеуказанных файлов (1cv7_*.md, 1cv7.stop) в папке с конфигурацией нет, то программа работает в "прозрачном" режиме, не выполняя никаких действий.

Установка:
1) Сделать резервную копию папки 1Cv7\BIN
2) Скопировать в нее файл md_chng.dll
3) Скопировать в нее файл patch_seven.exe и запустить его (выполнить патч).

Предыдущие разработки, сделанные по похожей технологии:
Решение проблемы 100% загрузки процессора при ожидании транзакции (ВК+перехват DLL)
Запрет запуска ert на низком уровне (статья+ВК)
8 Морозов Александр
 
21.04.06
06:05
(6) Так всеравно чтоб изменения вступили в силу надо перезагружать 1С...
9 skunk
 
21.04.06
06:06
что больше всего забавило в горячей замене
12 Слоняра
 
21.04.06
06:14
(11)а таблица или форма?
13 Obed
 
21.04.06
06:15
(12) Модуль
14 skunk
 
21.04.06
06:16
(12)таблицы храни во внешних файлах... а форму... тебе так часто приходится менять форму
15 Слоняра
 
21.04.06
06:18
(14)не часто конечно.. хз, говорю же накрайняк..
22 skunk
 
21.04.06
06:49
(21)а не проще ли тогда всех выгнать... и дира в том числе
23 skunk
 
21.04.06
06:49
у меня ни когда с этим проблем не было... пинал даже генерала... если надо то надо...
25 skunk
 
21.04.06
07:18
аха... той же жопой
26 Слоняра
 
21.04.06
07:30
(23)ты думаешь я стесняюсь дира выгнать? ее просто нет и кабинет закрыт..
27 Слоняра
 
21.04.06
07:31
+26 и это.. модальное окошко висит у нее.
28 skunk
 
21.04.06
07:32
(26)пачткорд...


ну не повезло... нех забывать
30 skunk
 
21.04.06
07:37
убьет меня Рома... если нелегкая в москву занесет
33 GrayT
 
21.04.06
08:53
(0)А что за GenerateProxyDLL?
35 romix
 
модератор
21.04.06
12:08
(11) #ЗагрузитьИзФайла
Это тоже никто не отменял. Проблема только в том, что эти директивы надо сначала вписать в конфигурацию, и только потом их можно будет юзать. Кроме того, они дают ряд ограничений (например, не работает должным образом Intellisence).
36 romix
 
модератор
21.04.06
12:08
(16) Skunk, а ты пробовал это сделать прежде чем писать? Как результаты?
38 romix
 
модератор
21.04.06
12:17
(33) В данном случае оно не используется - осталось от других разработок.
Позволяет сделать "подставную" DLL, чтобы попасть в адресное пространство процесса. На входе даешь имя DLL и список функций, а на выходе она дает файл проекта DPR для Delphi (при компиляции образуется "подставная" DLL).
40 romix
 
модератор
21.04.06
12:23
(37) Это не ВК, а OpenConf. Там тоже подменой функций DLL вставлены полезные вещи.
И ты многое теряешь. Книга знаний: OpenConf: пишем скрипты для конфигуратора 1С 7.7 (статья)

(37-2) "На ходу" заменять можно только метаданные (интерфейсы, перечисления, общие таблицы, картинки, права, ГМ и т.д) но не структуру данных. Структура данных заменена, естественно, не будет - для этого надо выгонять юзеров.
41 romix
 
модератор
21.04.06
12:24
(39-2) Смотри также книгу Джеффрри Рихтера "Windows для профессионалов" - там описаны несколько способов внедрения DLL и замены функций API.
42 GrayT
 
21.04.06
12:25
(41)спасибо, спасибо - ты мне ее уже рекомендовал, а я ее уже нашел - но вот руки до нее пока не дошли :(
43 romix
 
модератор
21.04.06
12:32
(31) Да, в каких-то случаях TurboMD практичнее. Сам его использую - очень удобно.

Но иногда юзер звонит "Не могу войти в журнал - пишет "недостаточно прав доступа"".

Или надо добавить в перечисление новый пункт.

Или заменить что-то в таблице (которые все не повыкидываешь в файлы, да и запутаться потом в них легко).

Или отредактировать меню и панели инструментов, не выгоняя всех из базы.

То есть, вот такого рода правки - чтобы не останавливать работу всех пользователей, когда нужно что-то незначительное и не затрагивающее структуру данных поправить одному из них.
45 Круто
 
21.04.06
12:42
Роман, а что потом-то делать с МД? В конфигураторе какой будет? Я так думаю, что при подмене надо по окончании работы просто объединить новый МД со старым. Так?
46 romix
 
модератор
21.04.06
12:58
(45) Да, надо объединить или (если правились перечисления) загрузить измененную конфу. Перед объединением конечно надо сделать бэкап и грохнуть (переместить в другую папку) все новые версии MD.
48 romix
 
модератор
21.04.06
13:01
(47) Удали все "горячие добавления" - там будет виден старый MD.
52 Круто
 
21.04.06
13:15
ОК, попробуем посмотреть :) Спасибо за труды!
59 Mosson
 
28.04.06
13:07
Пасиба БОЛЬШОЕ.
очень полезная штучка. уже поставил, тестирую...
плюсы уже описаны почти все - исправления не касающиеся данных вносить крайне приятственно.
я например не рисковал переделывать структуру регистра из-за боязни вылезания кучи багов, а 50 юзеров выгнать быстрее чем за 15 мин нерватрепки не получиться.
теперь вот сижу. что не выловлю сразу можно будет "на лету подправить"
68 Mosson
 
30.04.06
15:07
(67) ты как с руководством разговариваешь?
по кому-то депремирование плачет ]:->
73 romix
 
модератор
30.04.06
18:25
Поставил отладочную печать: короче, 1С-ка при открытии открывает файл с полным путем:
E:\MD_CHANGER\v77\1Cv7.MD

А при выгрузке или сохранении -
1Cv7.MD
(без пути)
78 ildus
 
01.05.06
12:41
romix, а ты можеш сделать перехват с подменой пути к *.dbf и *.cdx ? хочется разделить их по разным дискам, например индексы на RAM-диск закинуть.
79 romix
 
модератор
01.05.06
13:40
(78) Уже сделал - http://x-romix.narod.ru/CDX_MOVER.rar
Если будет хотя бы минимально положительный результат - прошу об этом сказать.

Мои раскопки в этом направлении также привели к программе SuperCache, которая, по идее, должна решить проблему отсутствующего кеша в NT/2000 при подключении второго пользователя. Проверь также ее.
80 romix
 
модератор
01.05.06
13:45
SuperCache должна (возможно) ускорить "в десятки раз" работу файл-серверной 8-ки или 7.7, за счет кеширования на уровне блоков жесткого диска.
81 DGorgoN
 
01.05.06
13:57
(69) Так и делаю. Я выгрузку/загрузку для укорения делаю..
82 DGorgoN
 
01.05.06
14:00
(80) Извени, я так и не понял. Баг с выгрузкой/загрузкой вылечен?
(79) За эту фифку тоже большое спасибо. Жалко что вчера не увидел, а то бы уже поюзал. Теперь только через неделю :( - когда на сервере никого не будет :).
83 romix
 
модератор
01.05.06
14:17
(82) Да, вылечен (полным отрубанием доступа в конфигуратор).
84 romix
 
модератор
01.05.06
14:19
Т.е. когда нет "горячих" замен MD, 1С работает как обычно, без изменений.
А если они есть, то
а) доступ в конфигуратор запрещен
б) 1С в режиме "предприятие" юзает замещающий MD с последним номером.
85 romix
 
модератор
01.05.06
14:20
Скачать можно по ссылке (0)
86 DGorgoN
 
01.05.06
14:20
(82) испр. фифку = фишку..
87 DGorgoN
 
01.05.06
14:21
(85) Огроменное спасибо :)..
91 romix
 
модератор
02.05.06
09:06
(90) Не работала наверное загрузка (т.к. при выгрузке был выгружен не тот MD). Теперь проблема не должна проявляться, т.к. вообще не пустит в конфигуратор при наличии горячих замен md.
94 jbond
 
02.05.06
13:42
А где можно официально скачать траял SuperCache?
Этот поиск фактически ничего не дает, как-будто развитие прекратилось.

Кто-нибудь сравнивал его с O&O CleverCache V6 Professional?
http://www.oo-software.com/en/products/ooclevercache/pro/
99 romix
 
модератор
02.05.06
16:13
(98) Поправил. Ссылка прежняя.
md_chng.dll от 02.05.06, 16:08, 47104 байт
Я не хочу быть самым богатым человеком на кладбище. Засыпать с чувством, что за день я сделал какую-нибудь потрясающую вещь — вот что меня интересует. Стив Джобс