Задача следующая:
На машине запущено два процесса (dllhost), но под разными пользователями (System и <CurrentUser>)
Как можно средствами C# выщемить процесс по имени пользователя(<CurrentUser>) и убить его )
(В идеале нужно было сделать shutdown COM+ приложения, а самый простой способ IMHO — это просто убить dllhost запущенный от имении пользователя)
Заранее спасиба !
using System.Diagnostics;
...........
ProcessStartInfo psi = new ProcessStartInfo("имя фала");
psi.UserName = "Имя пользователя";
Process p = new Process();
p.StartInfo = psi;
p.Kill;
.........
Здравствуйте, NagornovAlex, Вы писали:
NA>На машине запущено два процесса (dllhost), но под разными пользователями (System и <CurrentUser>) NA>Как можно средствами C# выщемить процесс по имени пользователя(<CurrentUser>) и убить его ) NA>(В идеале нужно было сделать shutdown COM+ приложения, а самый простой способ IMHO — это просто убить dllhost запущенный от имении пользователя) NA>
Используя WMI и класс Win32_Process получить список процессов и посмотреть имя владельца. На VB это выглядит примерно так:
strComputer = "."Set objWMIService = GetObject("winmgmts:" _
& "{impersonationLevel=impersonate}!\\" _
& strComputer & "\root\cimv2")
Set colProcessList = objWMIService.ExecQuery _
("Select * from Win32_Process")
For Each objProcess in colProcessList
colProperties = objProcess.GetOwner( _
strNameOfUser,strUserDomain)
Wscript.Echo "Process " & objProcess.Name _
& " is owned by " _
& strUserDomain & "\" & strNameOfUser & "."Next
Если у Вас нет паранойи, то это еще не значит, что они за Вами не следят.
Re[2]: Убить процесс по имени пользователя
От:
Аноним
Дата:
03.03.06 09:59
Оценка:
TK>Используя WMI и класс Win32_Process получить список процессов и посмотреть имя владельца. На VB это выглядит примерно так: TK>
А можно ли срествами WMI получить COM+ приложение и стопнуть его ?
Походу можно тока DCOM и COM приложение посмотреть Win32_ComApplication А вот COM+ приложения чтоп получить не нашел ...
Здравствуйте, NagornovAlex, Вы писали:
NA>(В идеале нужно было сделать shutdown COM+ приложения, а самый простой способ IMHO — это просто убить dllhost запущенный от имении пользователя)
Легальнее будет использование COMAdmin (Add reference -> COM -> COM+ 1.0 Admin Type Library). Остановка приложения — проще простого:
COMAdmin.COMAdminCatalogClass c = new COMAdmin.COMAdminCatalogClass();
c.ShutdownApplication("Test");
Здравствуйте, Admiral, Вы писали:
A>Здравствуйте, NagornovAlex, Вы писали:
NA>>(В идеале нужно было сделать shutdown COM+ приложения, а самый простой способ IMHO — это просто убить dllhost запущенный от имении пользователя)
A>Легальнее будет использование COMAdmin (Add reference -> COM -> COM+ 1.0 Admin Type Library). Остановка приложения — проще простого: A>
A>COMAdmin.COMAdminCatalogClass c = new COMAdmin.COMAdminCatalogClass();
A>c.ShutdownApplication("Test");
A>
СПАСИБА БОЛЬШОЕ !!!! ОГРОМНЫЙ РЕСПЕКТ ! Думал что это не реально сделать !
Здравствуйте, Admiral, Вы писали: A>Легальнее будет использование COMAdmin (Add reference -> COM -> COM+ 1.0 Admin Type Library). Остановка приложения — проще простого: A>
A>COMAdmin.COMAdminCatalogClass c = new COMAdmin.COMAdminCatalogClass();
A>c.ShutdownApplication("Test");
A>
СПАСИБА ОРГОМНОЕ !!!! Очень помог !!! Уже забил искать, думал что нельзя
А может быть еще как — то можно изменить тип активации COM+ приложения. В этой tlb нашел перечесление
Здравствуйте, NagornovAlex, Вы писали:
NA>А может быть еще как — то можно изменить тип активации COM+ приложения. А вот ни методов, ни объектов че то не могу найти ....
Будет что-то типа этого:
COMAdminCatalogClass adminCatalog = new COMAdminCatalogClass();
COMAdminCatalogCollection applications = (COMAdminCatalogCollection)adminCatalog.GetCollection("Applications");
applications.Populate();
for (int i = 0; i < applications.Count; i++)
{
COMAdmin.ICatalogObject app = (ICatalogObject)applications.get_Item(i);
if (app.Name.Equals("Test")) // Name of your application
{
// 1 - Server activation, 0 - in-proc (library activation);
app.set_Value("Activation", 0);
applications.SaveChanges();
break;
}
}
Re[4]: Убить процесс по имени пользователя
От:
Аноним
Дата:
06.03.06 17:53
Оценка:
Здравствуйте, Admiral, Вы писали:
A>Здравствуйте, NagornovAlex, Вы писали:
NA>>А может быть еще как — то можно изменить тип активации COM+ приложения. А вот ни методов, ни объектов че то не могу найти ....
A>Будет что-то типа этого:
A>
A>COMAdminCatalogClass adminCatalog = new COMAdminCatalogClass();
A>COMAdminCatalogCollection applications = (COMAdminCatalogCollection)adminCatalog.GetCollection("Applications");
A>applications.Populate();
A>for (int i = 0; i < applications.Count; i++)
A>{
A> COMAdmin.ICatalogObject app = (ICatalogObject)applications.get_Item(i);
A> if (app.Name.Equals("Test")) // Name of your application
A> {
A> // 1 - Server activation, 0 - in-proc (library activation);
A> app.set_Value("Activation", 0);
A> applications.SaveChanges();
A> break;
A> }
A>}
A>
Блин класс
А раскажи плиз как ты узнаешь какие свойства есть и как они правильно пишутся ?
Вот например, есть перечесление COMAdminServiceStatusOptions. Из чего очевидно, что есть какое-то свойство с помощью которого я могу получить статус COM+ приложения. Походу должно быть свойство типа ServiceStatus или Status (но ни то, ни другое не подходит ). Как это можно узнать ?
Здравствуйте, Аноним, Вы писали:
А> А раскажи плиз как ты узнаешь какие свойства есть и как они правильно пишутся ? А>Вот например, есть перечесление COMAdminServiceStatusOptions. Из чего очевидно, что есть какое-то свойство с помощью которого я могу получить статус COM+ приложения. Походу должно быть свойство типа ServiceStatus или Status (но ни то, ни другое не подходит ). Как это можно узнать ?
Конкретно по COMAdminServiceStatusOptions ничего сказать не могу.
Компонентная модель COM+ Admin описана здесь: COM+ Administration Collections. У каждого элемента есть свойства, они там более-менее подробно описаны. Так что — дерзай!