|
v7: 100%-ная выгонялка пользователей | ☑ | ||
---|---|---|---|---|
0
extrim-style
15.03.16
✎
15:10
|
Задача: обеспечить монопольный режим для sql-базы. Подскажите хорошую выгонялку без лишнего функционала (бэкап не нужен, нужно по возможности закрытие sql-соединений, kill process и т.п.).
|
|||
1
Волшебник
модератор
15.03.16
✎
15:11
|
||||
2
Злопчинский
15.03.16
✎
15:16
|
рассылка по сети сообщений "через 1 мин база будет принудительно завершена", через 1мин10 сек тупо киляешь все 1ски и запускаешься монопольно
|
|||
3
vde69
15.03.16
✎
15:17
|
важно не выгнать а не пустить (даже в окно авторизации), большинство выгонялок это не умеют делать
|
|||
4
vde69
15.03.16
✎
15:18
|
(2) а если у меня 10 баз открыто, ты будешь килять все 10?
|
|||
5
extrim-style
15.03.16
✎
15:18
|
(1) я искал. И даже здесь - Книга знаний: Выгонялка пользователей для 1С 7.7, 8.0, 8.1. Кучу времени потратил, но пока еще ничего внятного не нашел.
(2) сейчас в конфе реализована выгонялка по константе, но она работает раз в минуту, т.е. пользователь все-равно может приконнектиться (3) да, это и нужно |
|||
6
extrim-style
15.03.16
✎
15:19
|
(4) по-моему taskkill можно выборочно сделать
|
|||
7
vde69
15.03.16
✎
15:20
|
у меня есть такая хрень http://catalog.mista.ru/public/16686/
она не выгоняет, но позволяет не допустить входа или открытие окна авторизации |
|||
8
GROOVY
15.03.16
✎
15:20
|
Сеть вырубаешь на минуту... Гарантия 100%
|
|||
9
extrim-style
15.03.16
✎
15:21
|
(7) спасибо. Функционал избыточен для моей задачи.
|
|||
10
ДенисЧ
15.03.16
✎
15:21
|
перевести базу в сингл моде и не выделываться
|
|||
11
extrim-style
15.03.16
✎
15:24
|
Детализирую: мне нужно автоматическое открытие периода)
Я так понял, конкретно "открывать период автоматом" не проблема, а проблема как раз в осуществлении монопольного доступа. |
|||
12
extrim-style
15.03.16
✎
15:25
|
(10) регламентный пользователь не сможет зайти?
|
|||
13
ДенисЧ
15.03.16
✎
15:27
|
(12) а кто это?
|
|||
14
vde69
15.03.16
✎
15:28
|
используй (7)...
там можно указать кто может а кто нет заходить монопольно и еще куча полезностей.... я когда себе сделал был доволен как удав, куча мелкого гемороя ушла.... |
|||
15
mikecool
15.03.16
✎
15:28
|
отрубить коннекты к каталогу с базой, забрать права на каталог
|
|||
16
Cyberhawk
15.03.16
✎
15:29
|
Переименовать каталог с базой на время
|
|||
17
extrim-style
15.03.16
✎
15:29
|
(13) это - специально выделенный пользователь 1С с необходимыми правами для открытия периода (живого не предлагать).
|
|||
18
extrim-style
15.03.16
✎
15:30
|
(15) готовые решения есть?
|
|||
19
Новиков
15.03.16
✎
15:31
|
(18) если сделать как в (15), то будет Теоретический вопрос: проблемы некорректного выхода в 1C 7.7
|
|||
20
mikecool
15.03.16
✎
15:31
|
(18) эээ, хенд-мейд, зачем решение? это делается в консоли управления компом сервера
|
|||
21
extrim-style
15.03.16
✎
15:31
|
(20) вручную?
|
|||
22
vde69
15.03.16
✎
15:32
|
если у тебя подобные проблеммы, то открой период на год вперед и не парься...
|
|||
23
Fish
15.03.16
✎
15:34
|
(15) Так это для файловой, а в (0) скульная.
|
|||
24
Mikeware
15.03.16
✎
15:35
|
(17) а зачем? хранимкой остатки на новый период сгенерил, в 1ссистем поставил ТА на начало этого периода
|
|||
25
Mikeware
15.03.16
✎
15:35
|
и пользователей выгонять не нужно - пущай себе работают...
|
|||
26
ДенисЧ
15.03.16
✎
15:35
|
(24) У человека проблемы выгнать пользователей, а ты ему вон что предлагаешь...
|
|||
27
extrim-style
15.03.16
✎
15:39
|
(24) Насколько я помню УстановитьТАНа используется только в монопольном режиме.
|
|||
28
mikecool
15.03.16
✎
15:48
|
(23) у скульной семерки каталог все равно есть
|
|||
29
Mikeware
15.03.16
✎
16:33
|
(27) и что?
|
|||
30
ADirks
16.03.16
✎
11:41
|
нашёл в кучке скрипт, убивающий все процессы 1С, связанные с указанным каталогом базы
К нему нужна утилитка handle.exe от Марка Руссиновича (SysInternals) var wsh = new ActiveXObject("WScript.Shell"); var fso = new ActiveXObject("Scripting.FileSystemObject"); var net = new ActiveXObject("WScript.Network"); var DomainName = ""; var IBDir = ""; var fShowOnly = false; 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(); WScript.Echo("Comp. "+Comp.Name); 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(); var strNameOfUser = '', strUserDomain = ''; var nRetCode = Proc.GetOwner(strNameOfUser, strUserDomain); //WScript.Echo(Proc.Name+": "+Proc.ProcessID+"; "+nRetCode+" - "+strUserDomain+"\\"+strNameOfUser); Debug(Proc.Name+": "+Proc.ProcessID); if( NeedKill(Proc.ProcessID, IBDir) ) { WScript.Echo("Terminate process "+Proc.Name+": "+Proc.ProcessID); Debug("Terminate process "+Proc.ProcessID); if( !fShowOnly ) { 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 if( args(i) == "-i" ) { fShowOnly = 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 <имя домена>] [-i]\n\ Каталог базы нужно указывать без финального слэша ('\\')\n\ Если указан параметр --all, то уничтожаются процессы независимо от базы данных\n\ Если имя домена не указано, то уничтожаются процессы только на текущей машине.\n\ -i - показывает список процессов, подпадающих под указанные условия. \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(); } |
|||
31
aka AMIGO
16.03.16
✎
11:48
|
(30) Как всегда - молодец :)
+ https://social.technet.microsoft.com/Search/ru-RU?query=handle.exe&pgArea=header&ac=4 |
|||
32
Garykom
гуру
16.03.16
✎
12:08
|
http://devtrainingforum.v8.1c.ru/forum/thread.jsp?id=539761&threadtype=0
писал когда то обработку для УТ10 чтобы во всех вариантах в т.ч. файловом хорошо блокировало и разблокировало через прямую запись в файл блокировки файловой базы делал, с серверной базой оно и так замечательно пашет |
|||
33
Мимохожий Однако
16.03.16
✎
12:12
|
(32)1с77
|
|||
34
Garykom
гуру
16.03.16
✎
12:44
|
(33) а какая разница? аналогично разобраться с файлом блокировок или таблицей и "не пущщать" новых в базу
всем старым сообщение, если не вышли в срок то рубим уже через http://catalog.mista.ru/public/90647/ |
|||
35
Garykom
гуру
16.03.16
✎
12:45
|
(34)+ под не пущщать это банально пароли скажем меняются на другие или еще как
|
|||
36
ADirks
16.03.16
✎
12:45
|
фигасе, как форум то заплющило... не знаю как кто, а я своего поста прочитать не могу :)
Скрипт убил ещё и мисту попутно :)) а вот, ещё вариант, кажется от Орефкова нужны ещё grep и gawk echo off SET lockfile=X:\1C_Bases\Buh\1cv7.lck handle %lockfile% | grep -E 1cv7[sl]*.exe | gawk "{ print system(\"pskill \" $3) }" |
|||
37
Mikeware
16.03.16
✎
12:48
|
(36)нормально он читается....
|
|||
38
aka AMIGO
16.03.16
✎
12:51
|
(36) Я скрыл текст, нажми кнопку >> под твоим ником - текст развернётся
|
|||
39
ADirks
16.03.16
✎
12:54
|
(38) не, там вообще жестко всё было, всё форматирование испортилось, от своего поста я только заголовок видел. Щас нормально всё...
|
|||
40
Dotoshin
16.03.16
✎
13:42
|
(8) Павел, да вы просто хакер!
|
|||
41
ManyakRus
16.03.16
✎
18:43
|
Выгонялка:
net share sql /delete Запускалка: net share sql=C:\db\dbv7\iso-trd-sql /grant:Все,full |
|||
42
romix
16.03.16
✎
19:20
|
Я делал выгонялку и не пускалку.
http://x-romix.narod.ru/ Вышибает любые сеансы, предупреждает пользователей с таймером в трее. Корректно не пускает. http://x-romix.narod.ru/2006_12_05_Starter1C.rar |
|||
43
Лефмихалыч
16.03.16
✎
21:07
|
100% - это вот:
![]() |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |