我正在尝试以友好格式获取运行的Outlook版本,并且该版本是64位还是32位。到目前为止:
Writeline(Current version: + new Microsoft.Office.Interop.Outlook.Application().Version;);
// Current version: 15.0.0.5031
有任何提示吗?
答案 0 :(得分:0)
您可以使用注册表确定Outlook是32位还是64位:
static bool IsOutlook64Bit() {
using (RegistryKey officeKey = Registry.LocalMachine.OpenSubKey(@"Software\Microsoft\Office")) {
if (officeKey != null) {
Regex versionExp = new Regex(@"^[1-9][0-9]*\.[0-9]+$");
string maxVersion = officeKey.GetSubKeyNames()
.Where(x => versionExp.IsMatch(x))
.OrderByDescending(x => Decimal.Parse(x))
.FirstOrDefault();
if (!String.IsNullOrEmpty(maxVersion)) {
using (RegistryKey key = officeKey.OpenSubKey(maxVersion + @"\Outlook")) {
if (key != null) {
string bitness = Convert.ToString(key.GetValue("Bitness", null));
return bitness.Equals("x64", StringComparison.OrdinalIgnoreCase);
}
}
}
}
}
throw new InvalidOperationException("Outlook not found on this machine.");
}
注意:上面的方法使用最新版本,该版本可能不是正在运行的版本-但是,在大多数情况下,这是正确的。 Microsoft不建议安装任何Office产品的多个版本。为了达到100%的准确性,您可以解析问题中包含的版本号字符串,并匹配主要和次要部分(例如16.0
),而不仅仅是采用最大值。
友好名称(例如Outlook 2016)无法通过对象模型获得,我也不相信可以在注册表中轻松查询它。将版本号的主要部分与已知值列表匹配可能会更容易;例如
int major = (int)Decimal.Parse(maxVersion);
switch (major) {
case 12:
return "Outlook 2007";
case 14:
return "Outlook 2010";
case 15:
return "Outlook 2013";
case 16:
return "Outlook 2016":
}
答案 1 :(得分:0)
据我所知,为此获得一个友好的名称并没有什么好处,您需要检查版本号。像Bradley的解决方案一样,可以获取Outlook的maxVersion。因此,我认为您可以继续编写代码并复制Bradley的代码以检查Outlook版本。如下所示:
var version = new Microsoft.Office.Interop.Outlook.Application().Version.Substring(0,2);
int major = (int)Decimal.Parse(version);
switch (major)
{
case 12:
return "Outlook 2007";
case 14:
return "Outlook 2010";
case 15:
return "Outlook 2013";
case 16:
return "Outlook 2016";
}