6

我想在插件CreateRibbonExtensibilityObject()上调用 VSTO 插件时确定 Office/Excel 的版本。我遇到了这个问题,并且遇到了:

  • this.Application插件的 是,null此时 VSTO 尚未设置。
  • ThisAddIn_Startup(..)之后调用CreateRibbonExtensibilityObject()

this.Application.Version尚不可用,因为此时插件似乎尚未初始化。有没有办法在 VSTO 运行时调用插件时确定 Excel 的版本( 12、14 或 15CreateRibbonExtensibilityObject() ) ?

更新

发现 ItemProvider 被实例化了,我用下面的方法获取了主要的office版本。

FieldInfo temp = this.ItemProvider.GetType().GetField("_officeVersion", BindingFlags.NonPublic | BindingFlags.Instance);
uint officeVersion = (uint)temp.GetValue(this.ItemProvider);

我也接受 SliverNinja 的回答。

4

2 回答 2

5

您可以使用System.Diagnostics访问当前运行的Office进程excel.exe),获取进程文件名的路径MainModule),然后使用FileInfoVersion确定主要产品版本

int majorVersion = FileVersionInfo.GetVersionInfo(Process.GetCurrentProcess().MainModule.FileName).ProductMajorPart;
于 2012-11-26T17:27:12.420 回答
0

我正在使用FileVersionInfo. MainModule我希望这可以保存文件访问以提取版本信息。

int majorVersion = Process.GetCurrentProcess().MainModule.FileVersionInfo.ProductMajorPart;
于 2016-09-11T23:04:56.963 回答