gpt4 book ai didi

.net - 如何以编程方式查找正确的 Microsoft Office 产品版本号(和服务包)?

转载 作者:行者123 更新时间:2023-12-02 13:00:50 24 4
gpt4 key购买 nike

我无法找到多个 Office 产品的一致版本号。

这个post让我找到了这些知识库文章,其中建议了查找 Office 2007 的服务包的不同方法。和 Office 2010产品。

但是,Office .exe 文件的文件版本与图表不一致。

以我机器上安装的Excel 2010为例:

  • 帮助 > 关于 Excel 中的信息:Microsoft Excel 2010 (14.0.6106.5005) SP1
  • 通过Excel.exe属性查看文件版本:14.0.6106.5005
  • 原始文件版本(来自表格):14.0.4756.1000
  • SP1 文件版本(来自表格):14.0.6024.1000

是否有更可靠的方法来检索 Microsoft Office 产品的版本号和服务包?

最佳答案

我们决定退出,因为这花费了太多时间。然而,我想我应该发布我所得到的内容,以防有人需要更进一步。

首先,以下是列出了服务包版本的三篇相关知识库文章:

这些文章中的方法 2 表明可执行文件的属性是获取实际文件版本的可靠方法。不幸的是,事实并非如此。

以下是找到可执行文件的方法:

找到 Office 的安装根目录:

// version is one of these three: Office 2003 = 11, Office 2007 = 12, Office 2010 = 14
RegistryKey registryKey =
Registry.LocalMachine.OpenSubKey(String.Format(
@"SOFTWARE\Microsoft\Office\{0}.0\Common\InstallRoot", (int)version));

if (registryKey == null)
registryKey = Registry.LocalMachine.OpenSubKey(
registryKeyPath.Insert("SOFTWARE".Length, "\\Wow6432Node"));

if (registryKey != null)
installRoot = registryKey.GetValue("Path").ToString();

然后附加可执行文件的名称(Office 2003 除外):

  • 访问:MSACCESS.EXE
  • Excel:EXCEL.EXE
  • Outlook:OUTLOOK.EXE(2003 年使用 OUTLIB.DLL)
  • PowerPoint:POWERPNT.EXE
  • 单词:WINWORD.EXE

利用此信息,您可以获取所选应用程序的 FileVersionInfo。以Word为例:

FileVersionInfo fileVersionInfo = FileVersionInfo.GetVersionInfo(
Path.Combine(installRoot, "WINWORD.EXE"));

if (fileVersionInfo != null)
fileVersion = fileVersionInfo.FileVersion;

理论上,您现在可以将此版本号与知识库文章中的表进行比较,以找到正确的服务包。由于问题中列出的原因,我放弃了我的努力 - 你会发现版本号不匹配。

您可以使用类似于下面的代码来比较版本,例如 Word 2010 SP1:

Version version = new Version(fileVersion);
if (version >= new Version("14.0.6024.1000"))
servicePack = 1

以下是一些获取 Office 套件版本的代码:

string msodllPath = Path.Combine(
Environment.GetFolderPath(Environment.SpecialFolder.ProgramFiles),
String.Format(@"Common Files\microsoft shared\OFFICE{0}\MSO.DLL", (int)Version));

if (!File.Exists(msodllPath))
msodllPath = msodllPath.Replace("Program Files", "Program Files (x86)");

if (File.Exists(msodllPath))
{
FileVersionInfo msodll = FileVersionInfo.GetVersionInfo(msodllPath);
FileVersion = new Version(msodll.FileVersion);
}

如果您想获取版本名称(即专业版、旗舰版、学生版等),那么您将面临一场冒险。以下是一些可能有用的未经测试的代码片段。每个 Office 版本和每个版本都有所不同,祝您好运!

string fullNameRegistryKey = "";

if (Version == OfficeVersion.Office2010)
fullNameRegistryKey = String.Format(
@"SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\Office{0}.PROPLUSR",
(int)Version);
else if (Version == OfficeVersion.Office2007)
fullNameRegistryKey = String.Format(
@"SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\PRO",
(int)Version);

RegistryKey installRootRegistryKey = GetSoftwareRegistryKey(fullNameRegistryKey);

if (installRootRegistryKey != null)
FullName = installRootRegistryKey.GetValue("DisplayName")
.ToString().Replace("Microsoft ", "");

关于.net - 如何以编程方式查找正确的 Microsoft Office 产品版本号(和服务包)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8144062/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com