どのバージョンのOfficeがインストールされているかを検出するための最良の方法は何ですか?さらに、Officeの複数のバージョンがインストールされている場合、それらのバージョンを知りたいのですが。ボーナスは、インストールされている(またはインストールされている)Excelの特定のバージョンを検出できる場合です。
インストールされているOfficeバージョンを確認する1つの方法は、目的のOfficeアプリケーションのInstallRoot
レジストリキーを確認することです。
たとえば、Word 2007がインストールされているかどうかを確認する場合は、次のレジストリキーの存在を確認する必要があります。
HKLM\Software\Microsoft\Office\12.0\Word\InstallRoot::Path
このエントリには、実行可能ファイルへのパスが含まれています。
12.0(Office 2007用)を対応するバージョン番号に置き換えます:
Office 97-7.0 Office 98-8.0 Office 2000-9.0 Office XP-10.0 Office 2003-11.0 Office 2007-12.0 Office 2010-14.0(sic!) Office 2013-15.0 Office 2016-16.0 Office 2019-16.0(シック!)
他のアプリケーションにも同様のキーがあります。
HKLM\Software\Microsoft\Office\12.0\Excel\InstallRoot::Path
HKLM\Software\Microsoft\Office\12.0\PowerPoint\InstallRoot::Path
または、すべてのアプリケーションの共通ルートパスを確認できます。
HKLM\Software\Microsoft\Office\12.0\Common\InstallRoot::Path
特定のレジストリキーを使用しない別のオプションは、 here のようにMSIEnumProducts
APIを使用してMSIデータベースを照会することです。
余談ですが、Microsoftは異なるOfficeバージョンの並行インストールを公式にサポートしていません。それらは多少機能しますが、望ましくない効果や矛盾が生じる可能性があります。
更新:Office 2019およびOffice 365
Office 2019の時点で、MSIベースのセットアップは使用できなくなりました。Click-To-RunがOfficeを展開する唯一の方法です。定期的に更新されるOffice 365へのこの変更に伴い、Officeのメジャー/マイナーバージョン番号も更新されなくなりました(少なくとも当面)。つまり、Office 2019の場合でも、レジストリキーで使用される値とApplication.Version
(Wordなど)によって返される値は依然として16.0
です。
当分の間、Office 2016とOffice 2019を区別する文書化された方法はありません。手掛かりは、winword.exeのファイルバージョンです。ただし、このバージョンは、パッチが適用されたOffice 2016バージョンでも増分されます(以下の@antonioのコメントを参照)。
Officeのバージョンを何らかの形で区別する必要がある場合、たとえば特定の機能が存在すること、またはOfficeの最小バージョンがインストールされていることを確認するには、おそらく、メインのOfficeアプリケーションの1つのファイルバージョンを確認する最良の方法です。
// Using the file path to winword.exe
// Retrieve the path e.g. from the InstallRoot Registry key
var fileVersionInfo = FileVersionInfo.GetVersionInfo(@"C:\Program Files (x86)\Microsoft Office\root\Office16\WINWORD.EXE");
var version = new Version(fileVersionInfo.FileVersion);
// On a running instance using the `Process` class
var process = Process.GetProcessesByName("winword").First();
string fileVersionInfo = process.MainModule.FileVersionInfo.FileVersion;
var version = Version(fileVersionInfo);
Office 2019のファイルバージョンは16.0.10730.20102であるため、Office 2019または現在のOffice 365バージョンを扱っているものよりも大きいものが表示された場合。
HKEY_CLASSES_ROOT\Word.Application\CurVerはどうですか?
64ビットマシンに32ビットOfficeをインストールした場合、「SOFTWARE\Wow6432Node\Microsoft\Office\12.0 \」の存在を確認し、12.0を適切なバージョンに置き換える必要がある場合があります。 64ビットWindows 7にインストールされたOffice 2007の場合は確かにそうです。
Office 2010(== 14.0)は、64ビットバージョンが存在する最初のOfficeであることに注意してください。
私はこのCodeProjectを見つけ、この問題を解決してくれました。 http://www.codeproject.com/Articles/26520/Getting-Office-s-Version
namespace Software_Info_v1._0
{
using System;
using System.Collections.Generic;
using System.Text;
using Microsoft.Office.Interop;
public class MS_Office
{
public string GetOfficeVersion()
{
string sVersion = string.Empty;
Microsoft.Office.Interop.Word.Application appVersion = new Microsoft.Office.Interop.Word.Application();
appVersion.Visible = false;
switch (appVersion.Version.ToString())
{
case "7.0":
sVersion = "95";
break;
case "8.0":
sVersion = "97";
break;
case "9.0":
sVersion = "2000";
break;
case "10.0":
sVersion = "2002";
break;
case "11.0":
sVersion = "2003";
break;
case "12.0":
sVersion = "2007";
break;
case "14.0":
sVersion = "2010";
break;
default:
sVersion = "Too Old!";
break;
}
Console.WriteLine("MS office version: " + sVersion);
return null;
}
}
}
ボーナスは、インストールされている(またはインストールされている)Excelの特定のバージョンを検出できる場合です。
質問はずっと前に尋ねられ、答えられていましたが、この同じ質問は私がこの観察をするまで忙しかったです:
ビルド番号(例:15.0.4569.1506
)を取得するには、HKLM\SOFTWARE\Microsoft\Office\[VER]\Common\ProductVersion::LastProduct
をプローブします。ここで、[VER]
はメジャーバージョン番号(Office 2007では12.0、Office 2010では14.0、Office 2013では15.0)です。
64ビットWindowsでは、Officeインストールのビット数に関係なく、SOFTWARE
とMicrosoft
の間にWow6432Node
を挿入する必要があります。
私のマシンでは、これは最初にインストールされたバージョンのバージョン情報を提供します。たとえば、Office 2010の場合、番号は here にリストされている番号と一致し、File > Help
で報告されるバージョンとは異なります。これは、修正プログラムによって適用されるパッチを反映します。
public string WinWordVersion
{
get
{
string _version = string.Empty;
Word.Application WinWord = new Word.Application();
switch (WinWord.Version.ToString())
{
case "7.0": _version = "95";
break;
case "8.0": _version = "97";
break;
case "9.0": _version = "2000";
break;
case "10.0": _version = "2002";
break;
case "11.0": _version = "2003";
break;
case "12.0": _version = "2007";
break;
case "14.0": _version = "2010";
break;
case "15.0": _version = "2013";
break;
case "16.0": _version = "2016";
break;
default:
break;
}
return WinWord.Caption + " " + _version;
}
}