【问题标题】:Access Excel VSTO COM Addin from child process (console app)从子进程(控制台应用程序)访问 Excel VSTO COM 插件
【发布时间】:2021-07-16 02:34:04
【问题描述】:

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

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

使用第二个插件我可以做到这一点,因为我可以访问Application.COMAddIns 集合(第二个插件会在需要时关闭第一个插件,启动特权进程并在完成时重新启动第一个插件)。如果可能的话,我宁愿没有 2 个单独的插件来完成此任务。

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

感谢任何帮助/想法。

【问题讨论】:

    标签: c# excel vsto comaddin


    【解决方案1】:

    您可以使用 GetActiveObject 函数从外部应用程序获取 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;
    }
    

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


    注意,您可以从其他应用程序访问您的加载项方法和属性。在Call code in VSTO Add-ins from other Office solutions 文章中了解更多信息。

    【讨论】:

      猜你喜欢
      • 2010-12-01
      • 2012-05-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-04-06
      相关资源
      最近更新 更多