none
Завершить процесс на Терминальном сервере

    General discussion

  • Привет всем. Нужно завершить несколько процессов при выходе из сеанса. Но эти процессы запущены [highlight]одновременно несколькими пользователями[/highlight]. Допустим:
    TermServ: MS Server 2003 x64 Standard Edition
    ПРиложение: 1С 7.7 и 1С 8.1
    ПОльзователей: 15-20
    Клиент: XP Professional SP3
    Все запрещено кроме вышеуказанных программ. Конечно, можно просто выходить из программы чтобы завершить сеанс, но остается синий экран. ПРи следующем входе в систему тот же синий экран. 
    Видимо, это из-за процессов: hpmup083.bin, splwow64.exe
    Написал пакетный файл:
    Код:
    Echo off
    "C:\Program Files (x86)\1cv81\bin\1cv8.exe"
    taskkill /im hpmup083.bin /f
    taskkill /im splwow64.exe /f
    Иногда не работает. Хочу написать программу, которая завершает работу 1С определенного человека и выходит из сеанса. Например, User1, вошел в систему. Первое он увидит эту программу. Нажимает на панель 1С - грузится 1С. Выходит из 1С - Выскакивает эта программa, что б дать возможность запустить другую версию 1С или нажимает кнопку "Выход из сеанса" - Если 1С запущена, программа завершает ее и выходит из сеанса. Все
    using System;
    using System.Collections.Generic;
    using System.ComponentModel;
    using System.Data;
    using System.Drawing;
    using System.Text;
    using System.Windows.Forms;
    
    namespace WindowsFormsApplication1
    {
        public partial class Form1 : Form
        {
            public Form1()
            {
                InitializeComponent();
            }
    
            private void button1_Click(object sender, EventArgs e)
            {
                System.Diagnostics.Process[] processToKill = System.Diagnostics.Process.GetProcessesByName("1cv8");
                foreach(System.Diagnostics.Process pr in processToKill)
                    pr.Kill()
            }
    
            private void panel1_Click(object sender, EventArgs e)
            {
                System.Diagnostics.Process.Start(@"C:\Program Files (x86)\1cv81\bin\1cv8.exe");
            }
    
            private void Form1_FormClosed(object sender, FormClosedEventArgs e)
            {
            }
        }
    }
    Но, при нажатии на кнопку выходит сообщение об ошибке. Типа пытается завершить все процессы на имя "1cv8". Отказано в доступе.
    Мне нужно что он завершил процессы только User1. И подскажите код для выхода из сеанса?
    Friday, September 25, 2009 7:44 AM

All replies

  • Скажите, а из какого сеанса вы хотите выйти? Я так понимаю, с сетью вы не работаете (в смысле из своей программы), и убиваете только процессы локально на локальной клиентской машине, так? Опишите, пожалуйста, более подробно. Я запустил указанный вами код на собственной машине (локально) для одного экземпляра приложения - вроде работает.
    Friday, September 25, 2009 12:09 PM
  • Вообщем, на терминальном сервер приложение 1С, и несколько пользователей подключаются удаленно (локально и по VPN). все запускают одну программу (1С Бухгалтерия). В диспетчере задач отображаются несколько экземпляров процесса 1cv8, запущенные разными пользователями. Код который написал я, пытается завершить все процессы на это имя, Но, мне нужно что б она завершала процесс относительно пользователя.
    Ну на английском почитал, кое-что типа
    using (ITerminalServer server = manager.GetRemoteServer("your-server-name"))
    {
    	server.Open();
    	foreach (ITerminalServicesSession session in server.GetSessions())
    	{
    		if (session.ConnectionState == ConnectionState.Active && session.IdleTime >= TimeSpan.FromMinutes(30))
    		{
    			session.Logoff();
    		}
    	}
    }
    
    . не понял:) 
    Одним словом, написанная программа будет запускаться "при входе в систему" вкладка "СРеда", свойство пользователя и запрещает запуск "проводника windows.
    Friday, September 25, 2009 12:51 PM
  • Конечно, можно написать исключение (extension) что б на сообщение не выходило
    типа
    try
    {
         //код для завершения процесса
    }
    catch
    {
    }
    Но, думаю, это не эффективное решение

    P.S. если я запущу эту написанную программу от имени администратора, думаю, завершится все запущенные процессы
    Friday, September 25, 2009 1:00 PM
  • Вообщем, на терминальном сервер приложение 1С, и несколько пользователей подключаются удаленно (локально и по VPN). все запускают одну программу (1С Бухгалтерия). В диспетчере задач отображаются несколько экземпляров процесса 1cv8, запущенные разными пользователями. Код который написал я, пытается завершить все процессы на это имя, Но, мне нужно что б она завершала процесс относительно пользователя.
    В корне неправильный и небезопасный подход. Подобные процессы должны регулироваться административными полномочиями, как-то:

    1. Не пропускать более x сессий (по дефолту их 3, но у MS можно заказать дополнительные лицензии)
    2. Убивать сессии непосредственно, если имеется такая потребность у администратора

    Писать же подобные программные "прокладки" является, минимум, губительно.
    Friday, September 25, 2009 1:14 PM
  • Лицензии есть, действующий сервер
    Почему такой подход - синий экран при выходе из программы(это из-за других процессов, которые нужно завершить(а не 1cv8(пример))
    Нужен программный "выход из сеанса" - а это пока типа методы реализации
    Friday, September 25, 2009 1:29 PM
  • Вообщем, на терминальном сервер приложение 1С, и несколько пользователей подключаются удаленно (локально и по VPN). все запускают одну программу (1С Бухгалтерия). В диспетчере задач отображаются несколько экземпляров процесса 1cv8, запущенные разными пользователями. Код который написал я, пытается завершить все процессы на это имя, Но, мне нужно что б она завершала процесс относительно пользователя.
    Ну на английском почитал, кое-что типа
    ...
    Одним словом, написанная программа будет запускаться "при входе в систему" вкладка "СРеда", свойство пользователя и запрещает запуск "проводника windows.

    Слышал о такой проблеме в 1С, народ действительно мучается с терминальником. Возможно помогут сисадминские утилиты. Например query (http://stfw.ru/page.php?id=9668) - перечислить id процессов и убивать их. В C# возможно запускать из кода внешние приложения.
    Sunday, September 27, 2009 7:15 PM
  • Вообщем, на терминальном сервер приложение 1С, и несколько пользователей подключаются удаленно (локально и по VPN). все запускают одну программу (1С Бухгалтерия). В диспетчере задач отображаются несколько экземпляров процесса 1cv8, запущенные разными пользователями. Код который написал я, пытается завершить все процессы на это имя, Но, мне нужно что б она завершала процесс относительно пользователя.
    В корне неправильный и небезопасный подход. Подобные процессы должны регулироваться административными полномочиями, как-то:

    1. Не пропускать более x сессий (по дефолту их 3, но у MS можно заказать дополнительные лицензии)
    2. Убивать сессии непосредственно, если имеется такая потребность у администратора

    Писать же подобные программные "прокладки" является, минимум, губительно.

    Не знаю как у автора, но бывает пользователь не может зайти в сессию если она "висит", т.е. такая "автоматизация" может быть нужна.
    Sunday, September 27, 2009 7:17 PM
  • Не знаю как у автора, но бывает пользователь не может зайти в сессию если она "висит", т.е. такая "автоматизация" может быть нужна.

    mstsc.exe /console
    Sunday, September 27, 2009 8:09 PM
  • Не знаю как у автора, но бывает пользователь не может зайти в сессию если она "висит", т.е. такая "автоматизация" может быть нужна.

    mstsc.exe /console

    так сисадмин может быть дома (или хотеть там быть), а бухи в это время ваяют квартальную отчетность. Прикажете сидеть с ними только из-за чей-то халатности при раработки ПО ? Любой сисдмин скажет - будем "автоматизировать".
    Sunday, September 27, 2009 8:15 PM
  • Любой сисдмин скажет - будем "автоматизировать".
    Отлично сказано, 10+
    Tuesday, September 29, 2009 5:11 AM
  • Любой сисдмин скажет - будем "автоматизировать".
    Отлично сказано, 10+

    -10

    P.S. Если админ так скажет - это не админ, а ненужная боевая единица. Нужно админить, а не процессы "автоматически" валить.
    P.S2. Во-вторых, что мешает ему админить удаленно по тому же RDP или сторонними протоколами?
    Tuesday, September 29, 2009 6:22 AM
  • -10

    P.S. Если админ так скажет - это не админ, а ненужная боевая единица. Нужно админить, а не процессы "автоматически" валить.
    P.S2. Во-вторых, что мешает ему админить удаленно по тому же RDP или сторонними протоколами?

    Уважаемый МСУ, :)
    хороший админ - которого не видно и все работает и лень тут не причем. Во многих конторах есть "корпоративный стандарт" - удаленные вход для админов извне запрещен под страхом увольнения (особенно банки, а для госучреждений был указ соответсвующий). На сисадминском форуме так попробуйте высказаться - закидают шапками. Сначала профессионально админом несколько лет поработайте - потом будете характеристики людям давать. Потеме нельзя ничего придложиь, что-ли. Потрепаться захотелось !? И откуда такие бурутся !?
    Tuesday, September 29, 2009 6:31 AM
  • хороший админ - которого не видно и все работает и лень тут не причем.

    Всё работает - это киляются процессы? Фигасе "всё" работает :)))

     

    Во многих конторах есть "корпоративный стандарт" - удаленные вход для админов извне запрещен под страхом увольнения (особенно банки, а для госучреждений был указ соответсвующий). 

    Глупости. Про указ поподробнее. Ссылку на источник. Писал неоднократно различные решения под госзаказчиков, впервые об этом нонсенсе слышу.

    Сначала профессионально админом несколько лет поработайте - потом будете характеристики людям давать.

    Зачем мне им становиться? Достачно того, что каждый день бок о бок с ними соприкасаюсь по работе.

    На сисадминском форуме так попробуйте высказаться - закидают шапками.

    Снова байки? Вот Вам админский форум на скульру: http://www.sql.ru/forum/actualtopics.aspx?bid=27
    Введите в поиске слово RDP и покажите хоть одного админа, который считает это злом? xrdp, rdesctop для линуха - тоже в топку?

    Потеме нельзя ничего придложиь, что-ли. Потрепаться захотелось !? И откуда такие бурутся !?

    Вы запрещаете мне дискутировать в данной ветке? Где Вы заметили "трёп"? Какие "такие" берутся? Я Вас чем-либо оскорбил?

    P.S. Если не можете аргументированно отвечать, не отвечайте. А на остальное есть модераторы, которые в случае нарушений накажут виновных.

    Tuesday, September 29, 2009 6:49 AM
  • хороший админ - которого не видно и все работает и лень тут не причем.

    Всё работает - это киляются процессы? Фигасе "всё" работает :)))

     

    Во многих конторах есть "корпоративный стандарт" - удаленные вход для админов извне запрещен под страхом увольнения (особенно банки, а для госучреждений был указ соответсвующий). 

    Глупости. Про указ поподробнее. Ссылку на источник. Писал неоднократно различные решения под госзаказчиков, впервые об этом нонсенсе слышу.

    Сначала профессионально админом несколько лет поработайте - потом будете характеристики людям давать.

    Зачем мне им становиться? Достачно того, что каждый день бок о бок с ними соприкасаюсь по работе.

    На сисадминском форуме так попробуйте высказаться - закидают шапками.

    Снова байки? Вот Вам админский форум на скульру: http://www.sql.ru/forum/actualtopics.aspx?bid=27
    Введите в поиске слово RDP и покажите хоть одного админа, который считает это злом? xrdp, rdesctop для линуха - тоже в топку?

    Потеме нельзя ничего придложиь, что-ли. Потрепаться захотелось !? И откуда такие бурутся !?

    Вы запрещаете мне дискутировать в данной ветке? Где Вы заметили "трёп"? Какие "такие" берутся? Я Вас чем-либо оскорбил?

    P.S. Если не можете аргументированно отвечать, не отвечайте. А на остальное есть модераторы, которые в случае нарушений накажут виновных.


    Вот один документов по порядку работы с интернетом (остальные демонстриовать не буду)
    http://www.garant.ru/hotlaw/doc/113323.htm

    Не говорил, что RDP зло, говорил что удаленный доступ может быть неприемлем... Читайте вниательнее :)

    Соприкасание по работе "с врачаме не дает права рассуждать на медициские темы", но дает право окружающим напоминать об этом, такчто сам полез - терпи.

    Вопрос к модераторам, насколько позволительны дискуссии мимо темы топика и высказывания типа "треп"?
    Tuesday, September 29, 2009 7:05 AM
  • Ребята, читайте все полностью. Надо убивать процессы которые не дают правильно закончить работу 1С. А не саму программу. Предложите програмный выход из сеанса, код
    Tuesday, September 29, 2009 7:06 AM
  • Работаю системный инженером, часто езжу по разным городам. Согласно нашей политике безопасности компании, вход извне запрещен. По этому приходиться автоматизировать этот процесс
    Tuesday, September 29, 2009 7:09 AM
  • Работаю системный инженером, часто езжу по разным городам. Согласно нашей политике безопасности компании, вход извне запрещен. По этому приходиться автоматизировать этот процесс
    В каком состоянии у вас решение? С помощью программного запуска утилит не получается отловить конкретные процессы пользователя на терминальнике и убить их или такой вариант не подходит?
    Tuesday, September 29, 2009 7:18 AM
  • Значит, еще раз напишу. Пользователь при входе в систему на терминальный сервер, запускается пакетный файл (смотрите выше), и ничего больше (shell). Пакетный файл запускает программу 1С. При завершении программы 1С, и завершаются процессы которые мешать правильному выходу из сеанса. И остается синий экран. Пользователю остается нажимать только Х в верхнем углу. ПРи следующем входе тот же синий экран. Видимо, сеанс все еще висит.
    Решение: нужно заменить этот пакетный файл программой, которая будет и запускать программу 1С, и выходить из сеанса при ее закрытии.
    Tuesday, September 29, 2009 7:35 AM
  • Значит, еще раз напишу. Пользователь при входе в систему на терминальный сервер, запускается пакетный файл (смотрите выше), и ничего больше (shell). Пакетный файл запускает программу 1С. При завершении программы 1С, и завершаются процессы которые мешать правильному выходу из сеанса. И остается синий экран. Пользователю остается нажимать только Х в верхнем углу. ПРи следующем входе тот же синий экран. Видимо, сеанс все еще висит.
    Решение: нужно заменить этот пакетный файл программой, которая будет и запускать программу 1С, и выходить из сеанса при ее закрытии.

    что под сеансом тогда понимается как понял терминальный сеанс пользователя. Какие еще процессы пользователя остаются кроме hpmup083.bin, splwow64.exe ?
    Tuesday, September 29, 2009 7:57 AM
  • Видимо, сеанс все еще висит.

    Это предположение или утверждение? Сам посебе термнальный сеанс не пустой? Что осталось? Запустился ли пакетный файл повторно?
    Tuesday, September 29, 2009 7:59 AM
  • Сеанс висит, потому что у меня в диспетчере задач пишет что пользователь отключен. Пакетный файл не запускается повторно
    Tuesday, September 29, 2009 8:15 AM
  • Сеанс висит, потому что у меня в диспетчере задач пишет что пользователь отключен. Пакетный файл не запускается повторно

    а процессы пользователя в сеансе какие? или только сеанс висит?
    Tuesday, September 29, 2009 8:29 AM
  • насколько я помню

    taskmgr.exe
    ctfmon.exe *32
    winlogon.exe
    avp.exe *32
    ctfmon.exe
    csrss.exe
    rpdclip.exe

    я могу и ошибиться, в данный момент не могу определить процессы пользователя, потому что, сеанс висит не всегда, в день 1 раз почти у всех пользователей
    Tuesday, September 29, 2009 8:41 AM
  • А что будет если я добавлю в батник
    shutdown /l
    в конце для завершения сеанса
    Tuesday, September 29, 2009 8:46 AM
  • насколько я помню

    taskmgr.exe
    ctfmon.exe *32
    winlogon.exe
    avp.exe *32
    ctfmon.exe
    csrss.exe
    rpdclip.exe

    я могу и ошибиться, в данный момент не могу определить процессы пользователя, потому что, сеанс висит не всегда, в день 1 раз почти у всех пользователей

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

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

    Т.о. пока склоняюсь к тому, что скорее всего ваша проблема не в 1С и не как программу написать, а в корректности работы с терминальным сервером.
    http://social.technet.microsoft.com/Forums/ru-RU/windowsserverru/thread/e4bab57a-89de-4aee-a8db-f0393d4e4cc4
    Вы пробовали обсуждать проблему на сисадминских форумах, что говорят?
    Tuesday, September 29, 2009 9:02 AM
  • Вы пробовали обсуждать проблему на сисадминских форумах, что говорят?
    Еще нет, но я б хотел написать программу, думаю, будет интересно, совместно с форумчанами написать программу, или так сказать, универсальную утилиту, где можно будет обмениваться короткими сообщениями между пользователями (пользуемся UniChatом, что приходится сворачивать консоль терм. сервера). Так же, есть и пользователи, у которых не запрещен explorer.exe, для запуска различных версий 1С (7.7, 8.1), калькулятор.
    В общем, программа должна иметь следующее:
    1. обмен короткими ссобщениями внутри системы(терм сервер)
    2. Определяя права и разрешения пользователя, автоматически показывать доступные пользователю программы(напр. кальк, 1С 7.7)
    опытные пользователи могут explorer запустить через диспетчер задач->Файл->Новая задача
    3. Ограничить все, explorer, диспетчер задач кроме самой программы и тех программ которых она будут запускать
    4. И конечно мини отладчик, типа на печать не отправляет у многих пользователей -> команда net stop spooler, net start spooler и тп.тд
    5. И отправка сообщения администратору о просьбе удаленной помощи
    Tuesday, September 29, 2009 9:28 AM
  • Еще нет, но я б хотел написать программу, думаю, будет интересно, совместно с форумчанами написать программу, или так сказать, универсальную утилиту, где можно будет обмениваться короткими сообщениями между пользователями (пользуемся UniChatом, что приходится сворачивать консоль терм. сервера).

    Такое совместно можно делать там http://www.codeplex.com/ (Start your own project). Или еще где инфраструктрура нравится...
    Tuesday, September 29, 2009 9:33 AM
  • Огромное спасибо
    Tuesday, September 29, 2009 10:05 AM