首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从子进程(控制台应用程序)访问Excel VSTO COM加载项

从子进程(控制台应用程序)访问Excel VSTO COM加载项
EN

Stack Overflow用户
提问于 2021-04-22 05:18:00
回答 1查看 32关注 0票数 0

我想要做的是能够从我的VSTO COMAddin启动一个子进程(使用提升的权限),它可以访问产生它的进程的COMAddin对象。

更具体地说,我希望能够杀死插件(通过COMAddin.Connect = false),执行需要特权的工作,然后重新启动插件。

使用第二个插件我可以做到这一点,因为我可以访问Application.COMAddIns集合(第二个插件将在需要时关闭第一个插件,启动特权进程,并在第一个插件完成时重新启动它)。我不希望有两个单独的插件来完成这一点,如果可能的话。

我还知道我可以用new Excel.Application()启动一个新的Excel实例并从那里访问COMAddIns,但是我不想要一个新的实例,我希望能够从运行的实例控制插件。

任何帮助/想法我们都很感激。

EN

回答 1

Stack Overflow用户

发布于 2021-04-28 02:32:28

您可以通过使用GetActiveObject函数从外部应用程序获取Excel实例,该函数使用running Object Table (ROT)获取活动的Excel实例,并为您提供最后打开的Excel实例-不一定是与您拥有的窗口句柄相对应的实例。

代码语言:javascript
复制
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;
}

您可能还会发现AccessibleObjectFromWindow函数很有用,它检索与指定窗口相关联的对象的指定接口的地址。有关详细信息,请参阅How to use use late binding to get excel instance?

注意,您可以从其他应用程序访问您的外接程序方法和属性。在Call code in VSTO Add-ins from other Office solutions文章中阅读更多关于这方面的内容。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/67203615

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档