Список запущенных экземпляров COM-серверов.

Общие вопросы, не зависящие от языка реализации.

Модераторы: Duncon, Hawk, Romeo, Eugie

Ответить
Hide
Сообщения: 11
Зарегистрирован: 31 янв 2006, 07:05
Откуда: KZ_PVL

31 янв 2006, 07:33

Задача такая: Необходимо получить доступ поочередно к каждому из запущенных от имени пользователя ASPNET, экземпляров COM-сервера, а именно EXCEL. Пробую так(C#):
using SRIS = System.Runtime.InteropServices;

[SRIS.DllImport("ole32.dll")]
public static extern int CreateBindCtx(int reserved,out SRIS.UCOMIBindCtx bctx);
public SRIS.UCOMIRunningObjectTable ROT;
public SRIS.UCOMIBindCtx ctx;
public SRIS.UCOMIEnumMoniker EnMon;
SRIS.UCOMIMoniker[] pMon = new SRIS.UCOMIMoniker[10];
ArrayList RunnExcels = new ArrayList();

private void GetRunningExcels()
{
object oExcel = new object();
CreateBindCtx(0,out ctx);
ctx.GetRunningObjectTable(out ROT);
ROT.EnumRunning(out EnMon);
EnMon.Reset();
int pceltFetched=0;
string str="";
Monikers.Clear();
while (EnMon.Next(1,pMon,out pceltFetched) == 0x0)
{
pMon[0].GetDisplayName(ctx,pMon[0],out str);
if (str=="!{00024500-0000-0000-C000-000000000046}")
{
ROT.GetObject(pMon[0], out oExcel);
RunnExcels.Add(oExcel);
}
}
}

Ожидаю получить коллекцию объектов, соответствующую запущенным экземплярам, на деле колличество элементов коллекции совпадает с количеством реально запущенных экземпляров,но фактически все объекты ссылаются на один и тот же экземпляр. Подскажите, кто сталкивался с такой задачей.
Eugie
Сообщения: 707
Зарегистрирован: 17 фев 2004, 23:59
Откуда: SPb

01 фев 2006, 14:14

См. Additional Notes по ссылке http://support.microsoft.com/default.as ... -us;316126
Hide
Сообщения: 11
Зарегистрирован: 31 янв 2006, 07:05
Откуда: KZ_PVL

02 фев 2006, 05:36

Спасибо, большое-пребольшое! Очень похоже, что это поможет. Я пыталась подцепить пустой процесс, можно ведь закинуть в него определенную книгу, о потом по ней ориентироваться. Буду пробовать. :D
Ответить