Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/275.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 从子进程访问Excel VSCOM加载项(控制台应用程序)_C#_Excel_Vsto_Comaddin - Fatal编程技术网

C# 从子进程访问Excel VSCOM加载项(控制台应用程序)

C# 从子进程访问Excel VSCOM加载项(控制台应用程序),c#,excel,vsto,comaddin,C#,Excel,Vsto,Comaddin,我希望能够从VSTO COMAddin启动一个子进程(具有提升的权限),该子进程可以访问产生它的进程的COMAddin对象 更具体地说,我希望能够终止加载项(通过COMAddin.Connect=false),执行需要特权的工作,然后重新启动加载项 使用第二个加载项,我可以完成这项工作,因为我可以访问应用程序.COMAddIns集合(第二个加载项将在需要时关闭第一个加载项,启动特权进程,并在完成后重新启动第一个加载项)。如果可能的话,我不希望有两个独立的加载项来完成这个任务 我还知道,我可以使用

我希望能够从VSTO COMAddin启动一个子进程(具有提升的权限),该子进程可以访问产生它的进程的
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;
}
您还可能会发现该函数很有用,它为与指定窗口关联的对象检索指定接口的地址。。有关更多信息,请参阅


注意,您可以从其他应用程序访问外接程序方法和属性。在文章中阅读更多关于这方面的内容