在 VSTO 加载项上调用 CreateRibbonExtensibilityObject()
时确定 VSTO 加载项中的 Office/Excel 版本。我遇到了这个问题,并遇到了:
- 插件的
this.Application
是null
,目前VSTO尚未设置。 ThisAddIn_Startup(..)
在CreateRibbonExtensibilityObject()
之后调用。
this.Application.Version
尚不可用,因为加载项目前似乎尚未初始化。有没有办法在 VSTO 运行时调用外接程序CreateRibbonExtensibilityObject()
时确定 Excel 的版本(12、14 或 15)?
更新
发现 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
),然后使用FileInfoVersion
来确定主要产品版本。
int majorVersion = FileVersionInfo.GetVersionInfo(Process.GetCurrentProcess().MainModule.FileName).ProductMajorPart;
我正在使用MainModule
的FileVersionInfo
。我希望这样可以节省文件访问权限以提取版本信息。
int majorVersion = Process.GetCurrentProcess().MainModule.FileVersionInfo.ProductMajorPart;