在此之前确定VSTO 4中的Office版本。应用程序已设置

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

  • 这个插件的应用是null ,这个时候还没有被VSTO设置。
  • ThisAddIn_Startup(..)CreateRibbonExtensibilityObject()之后被调用。

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

UPDATE

发现ItemProvider被实例化了,我用了以下来获得主要的办公版本。

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

我也接受SliverNinja的回答。

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

 int majorVersion = FileVersionInfo.GetVersionInfo(Process.GetCurrentProcess().MainModule.FileName).ProductMajorPart; 

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

 int majorVersion = Process.GetCurrentProcess().MainModule.FileVersionInfo.ProductMajorPart;