|
v7: Выгонялка пользователей, 7.7 | ☑ | ||
---|---|---|---|---|
0
Bibr
30.05.13
✎
15:21
|
Пришлось вспоминать 7.7
Сделал выгонялку пользователей простенькую - по условиям запускаю завершениеРаботы. Упёрся в открытые модальные окна. Можно ли как-то обойти? Где почитать? |
|||
1
Mikeware
30.05.13
✎
15:22
|
никак. блоировку пользователя, можальные окна и запрос переиндексирования/смены даты штатно не обходится.
|
|||
2
Ёпрст
30.05.13
✎
15:22
|
формекс использовать или taskkill
|
|||
3
Chum
30.05.13
✎
15:25
|
(1) вопрос на смену даты отключается в сервисе :-/
а вот с модальными окнами засада, разве, что только на скуле обрубать соединения, а с дбфщиками бороться при помощи кнута и обесточивания компьютерной силовой сети. |
|||
4
Bibr
30.05.13
✎
15:31
|
(2) спасибо. а можно поподробней?
Необходимо отключать неотключившихся ночью. Если использовать формекс или тасккилл это можно в автоматическом режиме сделать? |
|||
5
Ёпрст
30.05.13
✎
15:34
|
(4) да.
формексу пофик на модальность, а тасккилу пофик на всё - тупо завершит процесс и привет. |
|||
6
Bibr
30.05.13
✎
15:34
|
(2) кажется начал понимать. предлагается вырубить процесс 1С.
а можно ли получить имя базы по процессу? т.к. грохать надо только одну определенную базу. и второй вопрос, если грохнуть тасккилом нигде никаких висюков не останется? |
|||
7
Bibr
30.05.13
✎
15:34
|
(5) в формексе куда смотреть?
|
|||
8
Ёпрст
30.05.13
✎
15:35
|
а тебе для чего выгонялка то нужна хоть ?
Если базу копирнуть - то есть хорошее средство, никого выгонять не надо. |
|||
9
Bibr
30.05.13
✎
15:55
|
(8) да, админ сказал для бэкапа папки базы и мд
|
|||
10
ДенисЧ
30.05.13
✎
15:56
|
(9) Для этого не обязательно выгонять
|
|||
11
Ёпрст
30.05.13
✎
15:56
|
||||
12
Bibr
30.05.13
✎
16:00
|
(11) спасибо, пробуем
|
|||
13
Torquader
30.05.13
✎
21:32
|
(1) Блокировку пользователя можно "обойти" если запускать 1С уже с выбранным пользователем через командную строку, а все остальные окна можно уже отслеживать из 1С.
P.S. при желании, если запускать 1С из специального процесса, то можно его "научить" закрывать окно авторизации по истечении некоторого времени. |
|||
14
Ganiev
31.05.13
✎
07:27
|
Если у пользователя ник в 1с и в винде одинаковый то можно через обработку ожидания запустить килпроцесс и убить процесс 1с!))
|
|||
15
Mikeware
31.05.13
✎
07:49
|
(14) ох и любишь ты куйню городить...
|
|||
16
ЧеловекДуши
31.05.13
✎
07:58
|
(0) Модальное окно, это ЗЛО, нет не получится, даже через формекс :)
Т.е. через формекс уже нельзя будет считать все по простому :) Лучше организовать внешнее приложение по закрытию открытой 1С и запускать енто приложение из самой 1С, при старте :) |
|||
17
ЧеловекДуши
31.05.13
✎
08:05
|
(7) В формексе есть таймер, т.е. вот так там есть:
глСервис = СоздатьОбъект("Сервис"); глСервис.ОбработкаОжидания("глПроверкаПростоя",0); //10 сек. //Функцию глПроверкаПростоя - разместить в глобальнике. //И она будет всегда отрабатывать, даже если будет открыто //модальное окно. :) |
|||
18
ЧеловекДуши
31.05.13
✎
08:07
|
+(7) Так же такое от формекса отрабатывает даже при падении 1С
Т.е. когда вылазит фатальная ошибка 1С :) |
|||
19
varelchik
31.05.13
✎
10:52
|
(18) с модальными да.
А вот выбор Времени, Периода, да еще вопрос Сохранить изменения или Сохранить документ, да еще кое какие ничем нельзя грохнуть. Но колысь пробовал через dinwrap вроде. |
|||
20
Ковычки
31.05.13
✎
10:54
|
можно все
|
|||
21
ADirks
31.05.13
✎
14:05
|
А вот например скрипт, убивающий строго определенные процессы (по каталогу базы), на всех компах домена. Естественно, надо соотв. права, и утилитку handle от Марка Руссиновича (www.sysinternal.com). Кандидат на отстрел определяется по факту захвата файла 1Cv7.LCK
Автора не помню. ======= Kill1C.js ================= var wsh = new ActiveXObject("WScript.Shell"); var fso = new ActiveXObject("Scripting.FileSystemObject"); var net = new ActiveXObject("WScript.Network"); var DomainName = ""; var IBDir = ""; var Flag_KillAll = false; var ThisComputer = net.ComputerName; var TempPath = wsh.ExpandEnvironmentStrings("%TEMP%"); try { if( !fso.DirectoryExists(TempPath) ) TempPath = ""; } catch(err) { TempPath = "."; } ProcessCommandLine(); KillProcesses(IBDir, DomainName); //===================================================================================== //===================================================================================== //===================================================================================== function KillProcesses(IBDir, DomainName) { if( DomainName != null && DomainName != "" ) { Debug('KillDomain'); ADSI = GetObject("WinNT://" + DomainName); ADSI.Filter = Array("computer"); Comp_enum = new Enumerator(ADSI); for(; !Comp_enum.atEnd(); Comp_enum.moveNext() ) { var Comp = Comp_enum.item(); if( Comp.Name.toLowerCase() == "adirks" ) { KillOnComputer(IBDir, Comp.Name); } } } else { Debug('KillOnComputer'); KillOnComputer(IBDir, ThisComputer); } } function KillOnComputer(IBDir, ComputerName) { Debug(ComputerName+": "+"winmgmts:{ImpersonationLevel=Impersonate}!\\\\" + ComputerName + "\\Root\\CIMV2"); try { WMI = GetObject("winmgmts:{ImpersonationLevel=Impersonate}!\\\\" + ComputerName + "\\Root\\CIMV2"); } catch(err) { return; } Proc_enum = new Enumerator( WMI.ExecQuery("SELECT Name, ProcessID FROM Win32_Process WHERE Name = '1cv7.exe' or Name = '1cv7s.exe' or Name = '1cv7l.exe'") ); for(; !Proc_enum.atEnd(); Proc_enum.moveNext() ) { var Proc = Proc_enum.item(); Debug(Proc.Name+": "+Proc.ProcessID); if( NeedKill(Proc.ProcessID, IBDir) ) { Debug("Terminate process "+Proc.ProcessID); Proc.Terminate } } } function NeedKill(ProcID, IBDir) { if( Flag_KillAll ) return true; var HandlesFName = TempPath+"\\1c~kill~handles.tmp"; var res = wsh.Run("cmd /C handle.exe -p "+ProcID+" >"+HandlesFName, 2, true); var HandlesFile = fso.OpenTextFile(HandlesFName); var text = HandlesFile.ReadAll(); HandlesFile.Close(); //fso.DeleteFile(HandlesFName); var re = new RegExp('\\s*\\S+:\\s+\\S+\\s*(.*)', 'ig'); var FName = (IBDir+'\\1cv7.lck').toLowerCase(); while( (matches = re.exec(text)) != null ) { var HandleName = matches[1].toLowerCase(); HandleName = HandleName.replace(/[\r\n]*/g, ''); Debug('Need kill? '+FName+' == '+HandleName); if( FName == HandleName ) return true; } return false; } function ProcessCommandLine() { var args = WScript.Arguments; if( args.length == 0 ) { Help(); WScript.Quit(); } for( i = 0; i < args.length; i++ ) { if( args(i) == "-d" ) { IBDir = args(++i); } else if( args(i) == "--domain" ) { DomainName = args(++i); } else if( args(i) == "--all" ) { Flag_KillAll = true; } else { Help(); WScript.Quit(); } } if( IBDir.length == 0 && !Flag_KillAll ) { WScript.Echo("Не указан каталог базы данных! (ключ -d <IBDir>)"); WScript.Quit(); } WScript.Echo("'" + IBDir + "'"); } function Help() { Help = "Использование:\n\ \tKill1C.js {-d <Каталог базы данных>|--all} [--domain <имя домена>]\n\ Если указан параметр --all, то уничтожаются процессы независимо от базы данных\n\ Если имя домена не указано, то уничтожаются процессы только на текущей машине.\n\ Для работы требуется утилитка handle.exe от sysinternals (http://www.sysinternals.com/)\n\ "; WScript.Echo(Help); } function Debug(msg) { return; var f = fso.OpenTextFile("debug", 8, true); f.WriteLine(msg); f.Close(); } |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |