Имя: Пароль:
1C
1C 7.7
v7: Как программно установить "ФлагСохранения" ?
,
0 artmatru
 
11.06.13
13:04
Старая история как мир, программно выкидывать юзеров из базы. Все работает, все классно, использую штатный метод ЗавершитьРаботуСистемы(0).
Но если модальное окно, тот же запрос на сохранение документа, уже было открыто то это не срабатывает. Дальше решил убивать процесс по PID процесса, работает только в случае если команду даю ручками из командной строки. В случае если та же самая команда запускается из 1с-ки, то ничего, запрашивает сохранение.
Можно ли каким то образом установить этот самый флаг команды ЗавершитьРаботуСистемы() в 0 до отработки КомандаСистемы("taskkill /f /PID "+ПолучитьPID())?
1 artmatru
 
11.06.13
13:08
Да собственно и не программно тоже, есть ли такая настройка вообще?
2 ЧеловекДуши
 
11.06.13
13:10
(0) Пробовал избавиться от модальных окон? :)
3 ЧеловекДуши
 
11.06.13
13:11
+(0) >>> Можно ли каким то образом установить

Можно почти все, на что способно твоё воображение.
Но это чревато последствиями :)
4 artmatru
 
11.06.13
13:11
(2) не, это не катит)
5 Ковычки
 
11.06.13
13:12
Сервис.Get("Win32_Process.Handle="+ПроцессИДОЛЕ).Terminate();
6 artmatru
 
11.06.13
13:13
(2) (3) Не понимаю просто в чем разница в одной и той же команде но запущенной мной и из 1с
7 Ковычки
 
11.06.13
13:14
КомандаСистемы("cmd /c taskkill /f /PID "+ПолучитьPID())
8 artmatru
 
11.06.13
13:16
(7) что за параметр /c ?
9 Ковычки
 
11.06.13
13:16
cmd /?
10 artmatru
 
11.06.13
13:16
понял
11 artmatru
 
11.06.13
13:17
щас отпишусь
12 artmatru
 
11.06.13
13:18
(7) не помогло
13 artmatru
 
11.06.13
13:19
ничего не изменилось
14 Ковычки
 
11.06.13
13:32
убиваем всех кроме себя

//*******************************************
Процедура Сформировать()
   ХТМЛ=СоздатьОбъект("htmlfile");
   ХТМЛ.open("text/html");
   ХТМЛ.write("<script type='text/javascript'>Новый=function(x,y){return new x(y)}</script>");
   Это=ХТМЛ.documentElement.document.Script;
   Компьютер=".";
   Шел=СоздатьОбъект("Shell.Explorer");
   ФСО=СоздатьОбъект("Scripting.FileSystemObject");
   РелизПрограммы=ФСО.GetFileVersion(Шел.fullname());
   Локатор=СоздатьОбъект("wbemscripting.swbemlocator");
   Сервис=Локатор.ConnectServer(Компьютер,"root\cimv2");
   ШелСкрипт=СоздатьОбъект("WScript.Shell");
   ВыполнениеИД=ШелСкрипт.Exec(""""+Шел.fullname()+""" -Embedding").ProcessID;
   Процесс=Сервис.Get("Win32_Process.Handle="+ВыполнениеИД);
   Имя=Процесс.Name;
   ПроцессИД=Процесс.ParentProcessID;
   Процесс.Terminate();
   Процессы=Это.Новый(Это.Enumerator,Сервис.ExecQuery("select * from win32_process where name='"+Имя+"' and not processid="+ПроцессИД));
   Пока Процессы.atEnd(0)=0 Цикл
       Сообщить(Процесс.CommandLine);
       //Процесс.Terminate();
       Процессы.moveNext(0);
   КонецЦикла;
КонецПроцедуры
15 Ковычки
 
11.06.13
13:32
В семерке и восьмерке требует либо повышение привилегий либо отключение контроля учетных записей
16 Ковычки
 
11.06.13
13:33
(13) либо пид не верен либо прав нет
17 artmatru
 
11.06.13
13:36
(16) не все норм, я под админом в хрюше, а PID тоже верный так как команда пытается закрыть, 1ска не дает ей свом вопросом
18 Ковычки
 
11.06.13
13:37
цикл вернее так

   Пока Процессы.atEnd(0)=0 Цикл
       Сообщить(Процессы.item(0).CommandLine);
       //Процессы.item(0).Terminate();
       Процессы.moveNext(0);
   КонецЦикла;
19 Ковычки
 
11.06.13
13:38
(17) если ключ /f /t то убивает без спроса если без то пытается послать окну закрытие
20 artmatru
 
11.06.13
13:48
(14) Поле агрегатного объекта не обнаружено(Enumerator)
Что это вообще такое) я мало понял вылезает окошко с именем Internet Explorer
21 artmatru
 
11.06.13
13:50
(19) тоже не помогло,все равно вылезает запрос
22 artmatru
 
11.06.13
13:51
А если запускать cmd а из него батник, как думаете?
23 Ковычки
 
11.06.13
14:00
Процедура Сформировать()
   Скрипт=СоздатьОбъект("MSScriptControl.ScriptControl");
   Скрипт.language="javascript";
   Скрипт.AddCode("Новый=function(x,y){return new x(y)}");
   Это=Скрипт.Eval("this");
   Компьютер=".";
   Шел=СоздатьОбъект("Shell.Explorer");
   ФСО=СоздатьОбъект("Scripting.FileSystemObject");
   РелизПрограммы=ФСО.GetFileVersion(Шел.fullname());
   Локатор=СоздатьОбъект("wbemscripting.swbemlocator");
   Сервис=Локатор.ConnectServer(Компьютер,"root\cimv2");
   ШелСкрипт=СоздатьОбъект("WScript.Shell");
   ВыполнениеИД=ШелСкрипт.Exec(""""+Шел.fullname()+""" -Embedding").ProcessID;
   Процесс=Сервис.Get("Win32_Process.Handle="+ВыполнениеИД);
   Имя=Процесс.Name;
   ПроцессИД=Процесс.ParentProcessID;
   Процесс.Terminate();
   Процессы=Это.Новый(Это.Enumerator,Сервис.ExecQuery("select * from win32_process where name='"+Имя+"' and not processid="+ПроцессИД));
   Пока Процессы.atEnd(0)=0 Цикл
       Сообщить(Процессы.item(0).CommandLine);
       //Процессы.item(0).Terminate();
       Процессы.moveNext(0);
   КонецЦикла;
КонецПроцедуры
24 artmatru
 
11.06.13
14:11
В общем код работает, но закрывает окна рандомно как то плюс опять же не закрывает при открытом модальном окне. Ладно забей, спасибо что попытался.
25 Ковычки
 
11.06.13
14:15
про модальное - не верю (с)


.Terminate(0);
26 artmatru
 
11.06.13
14:20
Это куда? в Цикл?
27 artmatru
 
11.06.13
14:31
Вырубает короче администратора,  а пользователь сидит) хотя условие входа в твою процедуру имя не равно админ)
28 artmatru
 
11.06.13
14:33
Если запущено только сессия админа, то вход в процедуру не происходит, тогда все норм
29 Ковычки
 
11.06.13
20:47
(27) не выдумывай отсебятину, а скопипасти
Имя это не имя пользователя, а имя образа
Проблемы невозможно решaть нa том же уровне компетентности, нa котором они возникaют. Альберт Эйнштейн