![]() |
![]() |
![]() |
|
v7: Получить список запущенных 1С... | ☑ | ||
---|---|---|---|---|
0
Злопчинский
01.11.11
✎
02:59
|
ноччу на сервере выполняются регламентные работы... - бэкапы и прочее, в т.ч. и пакетный конфигуратор на принудительную реиндексацию.
. что хочется: получить список пользователей с запущенными 1Сками... если среди пользователей с запущенными 1Сками есть "Такой-топользователь" - регламент не запускаем; если "Такойто" пользователь в списке отсутсвует то принудительно закилять все открытые 1Ски на сервере и выдать команду на запуск 1ски в пакетном режиме... . т.е. если я ночью работаю на серваке с 1Ской - задание не выполняем, если меня нет - киляем незакрытые и выполняем.. потому как некоторые юзвери просто уходят не выключив... . спсб! |
|||
1
skunk
01.11.11
✎
03:34
|
список пользователей 1С или винды ... списко одной базы или именно запущенных на сервере
|
|||
2
Злопчинский
01.11.11
✎
03:43
|
(1)
а) ну так как у меня работают в терминале - то программа-минимум - зарубить именно запущенных на сервере... . б) если конечно удастся зарубить процессы только для конкретной базы - это еще лучше.. но я слабо представляю.. хотя наверное можно что-то вытащить из свойств процесса.. . в) еще лучше если учтется то, что база с сервера может быть запущена локально - тогда надо освободить базу для выполнения регламента... . по крайней мере - хотя бы пункт А) ;-) |
|||
3
DJ Anthon
01.11.11
✎
04:05
|
куча выгонялок уже есть. можно и свою написать. в обработку ожидания кидаем проверку на наличие файла-флага и выбрасываем с таймаутом
|
|||
4
Злопчинский
01.11.11
✎
04:08
|
(3) не нравится мне такое...
|
|||
5
smaharbA
01.11.11
✎
06:08
|
openfiles
|
|||
6
smaharbA
01.11.11
✎
06:09
|
сперва выставив глобальный флаг (но несколько снизит быстродействие системы)
|
|||
7
smaharbA
01.11.11
✎
06:16
|
gflags -r +otl
gflags -k +otl из сапорт тулуз а так - напиши монитор пользователей адинес, проверять лок по смещению 2000000 + номер пользователя в syslog\links.tmp |
|||
8
smaharbA
01.11.11
✎
06:18
|
примерно так
Перем GENERIC_EXECUTE, GENERIC_READ, GENERIC_WRITE, OPEN_EXISTING, FILE_SHARE_READ, FILE_SHARE_WRITE, FILE_FLAG_RANDOM_ACCESS, FILE_ATTRIBUTE_NORMAL; Функция ЗагрузитьКомпоренту() Попытка Возв=1; Враппер=СоздатьОбъект("DynamicWrapper"); Исключение Возв=0; КонецПопытки; Возврат Возв; КонецФункции // ЗагрузитьВК Функция АПИФункцииИКонстанты() GENERIC_EXECUTE = 536870912; GENERIC_READ = -2147483648; GENERIC_WRITE = 1073741824; OPEN_EXISTING = 3; FILE_SHARE_READ = 1; FILE_SHARE_WRITE = 2; FILE_FLAG_RANDOM_ACCESS =268435456; FILE_ATTRIBUTE_NORMAL = 0; Враппер.Register("kernel32.dll","CreateFileA","i=sllllll","f=s","r=l"); Враппер.Register("kernel32.dll","LockFile","i=lllll","f=s","r=l"); Враппер.Register("kernel32.dll","UnlockFile","i=lllll","f=s","r=l"); Враппер.Register("kernel32.dll","CloseHandle","i=l","f=s","r=l"); КонецФункции // АПИФункцииИКонстанты Функция РазборПользователя(Знач Стр) Перем Сп,ТЗ,СтрТмп; Сп=СоздатьОбъект("СписокЗначений"); Стр=СтрЗаменить(Стр,"" "",""); Стр=СтрЗаменить(Стр,"{{",""); Стр=СтрЗаменить(Стр,"}}",""); Стр=СтрЗаменить(Стр,"},{","" ""); СтрТмп=""; Для Сч=1 По СтрКоличествоСтрок(Стр) Цикл СтрТмп=СтрПолучитьСтроку(Стр,Сч); СтрТмп=СтрЗаменить(СтрТмп,""",""","" ""); СтрТмп=СтрЗаменить(СтрТмп,"""",""); Сп.ДобавитьЗначение(СтрПолучитьСтроку(СтрТмп,2)); КонецЦикла; Если Сп.РазмерСписка()=0 Тогда Возврат 0; КонецЕсли; ТЗ=СоздатьОбъект("ТаблицаЗначений"); ТЗ.НоваяКолонка("Имя"); ТЗ.НоваяКолонка("Система"); ТЗ.НоваяКолонка("Режим"); ТЗ.НоваяКолонка("Дата"); ТЗ.НоваяКолонка("Время"); ТЗ.НоваяКолонка("Компьютер"); ТЗ.НоваяСтрока(); ТЗ.Имя = СокрЛП(Сп.ПолучитьЗначение(1)); Если Сп.ПолучитьЗначение(2)="C" Тогда ТЗ.Система = "Конфигуратор"; ИначеЕсли Сп.ПолучитьЗначение(2)="E" Тогда ТЗ.Система = "Предприятие"; ИначеЕсли Сп.ПолучитьЗначение(2)="M" Тогда ТЗ.Система = "Монитор"; ИначеЕсли Сп.ПолучитьЗначение(2)="D" Тогда ТЗ.Система = "Отладчик"; КонецЕсли; Если Сп.ПолучитьЗначение(3)="N" Тогда ТЗ.Режим = "Раздельный"; ИначеЕсли Сп.ПолучитьЗначение(3)="Y" Тогда ТЗ.Режим = "Монопольный"; КонецЕсли; ТЗ.Дата = СокрЛП(СтрПолучитьСтроку(СтрЗаменить(Сп.ПолучитьЗначение(4),",","" ""),1)); ТЗ.Время = СокрЛП(СтрПолучитьСтроку(СтрЗаменить(Сп.ПолучитьЗначение(4),",","" ""),2)); ТЗ.Компьютер = СокрЛП(Сп.ПолучитьЗначение(5)); Возврат ТЗ; КонецФункции // РазборФайлаНачало Функция АктивныеПользователи(База) Перем Текст,Сп,СтрТмп,ФСО,Символ, Хендл,Файл,Пусто; Перем Ширина[6],Стр,Кол; ТЗ=СоздатьОбъект("ТаблицаЗначений"); ТЗ.НоваяКолонка("Имя"); ТЗ.НоваяКолонка("Система"); ТЗ.НоваяКолонка("Режим"); ТЗ.НоваяКолонка("Дата"); ТЗ.НоваяКолонка("Время"); ТЗ.НоваяКолонка("Компьютер"); ФСО=СоздатьОбъект("Scripting.FileSystemObject"); Файл=База+"syslog\links.tmp"; Текст=ФСО.OpenTextFile(Файл,1,-1); СтрТмп=""; Пока Текст.AtEndOfStream=0 Цикл Символ=Текст.Read(1); Если КодСимв(Символ)=0 Тогда Символ=" "; КонецЕсли; СтрТмп=СтрТмп+Символ; Если СтрДлина(СтрТмп)>1023 Тогда ТЗ.Заполнить(РазборПользователя(Лев(СтрТмп,1024)),ТЗ.НоваяСтрока()); СтрТмп=Сред(СтрТмп,1025); КонецЕсли; КонецЦикла; Текст.Close(); АПИФункцииИКонстанты(); Хендл=Враппер.CreateFileA(Файл,GENERIC_READ + GENERIC_WRITE, FILE_SHARE_READ + FILE_SHARE_WRITE, Пусто, OPEN_EXISTING, FILE_FLAG_RANDOM_ACCESS + FILE_ATTRIBUTE_NORMAL, 0); Для Сч=-ТЗ.КоличествоСтрок() По -1 Цикл Рез=Враппер.LockFile(Хендл, 2000000 - Сч, 0, 1, 0); Рез=Макс(Рез,-Рез); Враппер.UnlockFile(Хендл, 2000000 - Сч, 0, 1, 0); Если Рез=1 Тогда ТЗ.УдалитьСтроку(-Сч); КонецЕсли; КонецЦикла; ТЗ.ВыбратьСтроки(); Пока ТЗ.ПолучитьСтроку() = 1 Цикл Для Сч=1 По ТЗ.КоличествоКолонок() Цикл Ширина[Сч]=Макс(СтрДлина(ТЗ.ПолучитьЗначение(ТЗ.НомерСтроки,Сч)),Ширина[Сч]); КонецЦикла; КонецЦикла; Для Сч=1 По ТЗ.КоличествоКолонок() Цикл ТЗ.УстановитьПараметрыКолонки(Сч,,,,,Ширина[Сч]); КонецЦикла; ТЗ.Выгрузить(ТЗФорма); Враппер.CloseHandle(Хендл); КонецФункции // АктивныеПользователи |
|||
9
andrewks
01.11.11
✎
08:09
|
зачётно
|
|||
10
filh
01.11.11
✎
08:15
|
крута!
|
|||
11
Ranger_83
01.11.11
✎
08:26
|
как у вас все запущенно :)
|
|||
12
Vovchai
01.11.11
✎
08:53
|
например
strComputer = ""."" Set objWMIService = GetObject(""winmgmts:"" _ & ""{impersonationLevel=impersonate}!\\"" & strComputer & ""\root\cimv2"") Set colProcessList = objWMIService.ExecQuery _ (""SELECT * FROM Win32_Process WHERE Name = '1cv8.exe'"") For Each objProcess in colProcessList 'бла бла бла. перечисление запущеных процессов 1cv8.exe objProcess.Terminate() 'так например убиваем процессы Next |
|||
13
ДенисЧ
01.11.11
✎
08:58
|
Хм, и работает же...
|
|||
14
Злопчинский
01.11.11
✎
15:28
|
(8) такая шняга с твоей подачи у меня уже давно крутится..
Речь о том, что прибить надо 1С извне, со стороны оси... |
|||
15
Злопчинский
01.11.11
✎
15:29
|
(12) попробуем...
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |