web-dev-qa-db-ja.com

インストールされているMS-Officeのバージョンを検出する方法は?

どのバージョンのOfficeがインストールされているかを検出するための最良の方法は何ですか?さらに、Officeの複数のバージョンがインストールされている場合、それらのバージョンを知りたいのですが。ボーナスは、インストールされている(またはインストールされている)Excelの特定のバージョンを検出できる場合です。

56
code4life

インストールされている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 AP​​Iを使用して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バージョンを扱っているものよりも大きいものが表示された場合。

71
Dirk Vollmar

HKEY_CLASSES_ROOT\Word.Application\CurVerはどうですか?

23
BobL2112

64ビットマシンに32ビットOfficeをインストールした場合、「SOFTWARE\Wow6432Node\Microsoft\Office\12.0 \」の存在を確認し、12.0を適切なバージョンに置き換える必要がある場合があります。 64ビットWindows 7にインストールされたOffice 2007の場合は確かにそうです。

Office 2010(== 14.0)は、64ビットバージョンが存在する最初のOfficeであることに注意してください。

16
Jason

私はこのCodeProjectを見つけ、この問題を解決してくれました。 http://www.codeproject.com/Articles/26520/Getting-Office-s-Version

9
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;
    }



}
}
8
zee

HKLM\\SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\App Paths\\[office.exe]、 どこ [office.exe]は、特定のオフィス製品のexeファイル名を表します。 winword.exeExcel.exeなど。実行可能ファイルへのパスを取得し、そのファイルのバージョンを確認します。

ファイルのバージョンを確認する方法: in C++ /in C#

そのようなアプローチに対する批判はありますか?

5
John Bosco

ボーナスは、インストールされている(またはインストールされている)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インストールのビット数に関係なく、SOFTWAREMicrosoftの間にWow6432Nodeを挿入する必要があります。

私のマシンでは、これは最初にインストールされたバージョンのバージョン情報を提供します。たとえば、Office 2010の場合、番号は here にリストされている番号と一致し、File > Helpで報告されるバージョンとは異なります。これは、修正プログラムによって適用されるパッチを反映します。

2
bovender
        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;
            }
        }
1
Rakeshravi G