web-dev-qa-db-fra.com

Comment détecter la version installée de MS-Office?

Quelqu'un sait-il quel serait le meilleur moyen de détecter quelle version d'Office est installée? De plus, si plusieurs versions d'Office sont installées, j'aimerais savoir de quelles versions il s'agit. Un bonus serait si je peux détecter la (les) version (s) spécifique (s) d'Excel installée (s).

56
code4life

Un moyen de vérifier la version d'Office installée consiste à vérifier les clés de registre InstallRoot des applications Office d'intérêt.

Par exemple, si vous souhaitez vérifier si Word 2007 est installé, vous devez vérifier la présence de la clé de registre suivante:

HKLM\Software\Microsoft\Office\12.0\Word\InstallRoot::Path

Cette entrée contient le chemin d'accès à l'exécutable.

Remplacez 12.0 (pour Office 2007) par le numéro de version correspondant:

 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 
 Bureau 2019 - 16,0 (sic!) 

Les autres applications ont des clés similaires:

HKLM\Software\Microsoft\Office\12.0\Excel\InstallRoot::Path
HKLM\Software\Microsoft\Office\12.0\PowerPoint\InstallRoot::Path

Ou vous pouvez vérifier le chemin racine commun de toutes les applications:

HKLM\Software\Microsoft\Office\12.0\Common\InstallRoot::Path

Une autre option, sans utiliser de clé de registre spécifique, serait d’interroger la base de données MSI à l’aide de l’API MSIEnumProducts comme décrit ici .

De plus, les installations parallèles de différentes versions d'Office ne sont pas officiellement prises en charge par Microsoft. Ils fonctionnent un peu, mais vous pouvez avoir des effets indésirables et des incohérences.

Mise à jour: Office 2019 et Office 365

À partir d'Office 2019, la configuration basée sur MSI n'est plus disponible, Click-To-Run est la seule façon de déployer Office maintenant. Avec ce changement vers Office 365 régulièrement mis à jour, les numéros de version majeur/mineur d'Office ne sont plus mis à jour (du moins pour le moment). Cela signifie que - même pour Office 2019 - la valeur utilisée dans les clés de registre et la valeur renvoyée par Application.Version (par exemple dans Word) est toujours 16.0.

Pour le moment, il n'existe aucun moyen documenté de distinguer Office 2016 d'Office 2019. Un indice pourrait être la version du fichier winword.exe; toutefois, cette version est également incrémentée pour les versions corrigées d'Office 2016 (voir le commentaire de @antonio ci-dessous).

Si vous devez faire la distinction entre les versions Office, par exemple, pour vous assurer qu’une fonctionnalité donnée est présente ou qu’une version minimale d’Office est installée, c'est probablement la meilleure façon d’examiner la version du fichier de l’une des principales applications Office:

// 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);

La version de fichier d'Office 2019 est 16.0.10730.20102. Par conséquent, si vous voyez une version supérieure à celle que vous utilisez avec Office 2019 ou une version actuelle d'Office 365.

71
Dirk Vollmar

Qu'en est-il de HKEY_CLASSES_ROOT\Word.Application\CurVer?

23
BobL2112

Si vous avez installé Office 32 bits sur un ordinateur 64 bits, vous devrez peut-être vérifier la présence de "SOFTWARE\Wow6432Node\Microsoft\Office\12.0 \", en remplaçant la version 12.0 par la version appropriée. C'est certainement le cas pour Office 2007 installé sur Windows 7 64 bits.

Notez qu'Office 2010 (== 14.0) est le premier Office pour lequel une version 64 bits existe.

16
Jason

J'ai trouvé ce CodeProject qui m'a aidé avec ce problème même: 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

Pourquoi ne pas vérifier HKLM\\SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\App Paths\\[office.exe], où [office.exe] représente un produit de bureau particulier, par exemple: winword.exe, Excel.exe etc. Là vous obtenez le chemin de l'exécutable et vérifiez la version de ce fichier.

Comment vérifier la version du fichier: en C++ /in C #

Des critiques sur une telle approche?

5
John Bosco

Un bonus serait si je peux détecter la (les) version (s) spécifique (s) d'Excel installée (s).

Je sais que la question a été posée et a reçu une réponse il y a longtemps, mais cette même question m'a tenu occupé jusqu'à ce que je fasse cette observation:

Pour obtenir le numéro de build (par exemple, 15.0.4569.1506), sonde HKLM\SOFTWARE\Microsoft\Office\[VER]\Common\ProductVersion::LastProduct, où [VER] est le numéro de version principal (12.0 pour Office 2007, 14.0 pour Office 2010, 15.0 pour Office 2013).

Sous Windows 64 bits, vous devez insérer Wow6432Node entre SOFTWARE et Microsoft miettes, quel que soit le nombre de bits de l'installation Office.

Sur mes machines, cela donne les informations de version de la version installée à l’origine. Pour Office 2010 par exemple, les numéros correspondent à ceux répertoriés ici , et ils diffèrent de la version indiquée dans File > Help, qui reflète les correctifs appliqués par les correctifs.

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