C# 从子进程访问Excel VSCOM加载项(控制台应用程序)
我希望能够从VSTO COMAddin启动一个子进程(具有提升的权限),该子进程可以访问产生它的进程的C# 从子进程访问Excel VSCOM加载项(控制台应用程序),c#,excel,vsto,comaddin,C#,Excel,Vsto,Comaddin,我希望能够从VSTO COMAddin启动一个子进程(具有提升的权限),该子进程可以访问产生它的进程的COMAddin对象 更具体地说,我希望能够终止加载项(通过COMAddin.Connect=false),执行需要特权的工作,然后重新启动加载项 使用第二个加载项,我可以完成这项工作,因为我可以访问应用程序.COMAddIns集合(第二个加载项将在需要时关闭第一个加载项,启动特权进程,并在完成后重新启动第一个加载项)。如果可能的话,我不希望有两个独立的加载项来完成这个任务 我还知道,我可以使用
COMAddin
对象
更具体地说,我希望能够终止加载项(通过COMAddin.Connect=false
),执行需要特权的工作,然后重新启动加载项
使用第二个加载项,我可以完成这项工作,因为我可以访问应用程序.COMAddIns
集合(第二个加载项将在需要时关闭第一个加载项,启动特权进程,并在完成后重新启动第一个加载项)。如果可能的话,我不希望有两个独立的加载项来完成这个任务
我还知道,我可以使用new Excel.Application()
启动一个新的Excel实例,并从那里访问COMAddIns
,但是我不想要新实例,我希望能够从运行的实例控制加载项
非常感谢您的帮助/想法。您可以使用函数从外部应用程序获取Excel运行实例,该函数使用运行对象表(ROT)获取活动Excel实例,并将为您提供上次打开的Excel实例,而不一定是与您拥有的窗口句柄对应的实例
public Excel.Application StartExcel()
{
Excel.Application instance = null;
try
{
instance = (Excel.Application)System.Runtime.InteropServices.Marshal.GetActiveObject("Excel.Application");
}
catch (System.Runtime.InteropServices.COMException ex)
{
instance = new Excel.ApplicationClass();
}
return instance;
}
您还可能会发现该函数很有用,它为与指定窗口关联的对象检索指定接口的地址。。有关更多信息,请参阅
注意,您可以从其他应用程序访问外接程序方法和属性。在文章中阅读更多关于这方面的内容