68 votes

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

Quelqu'un sait-il quel serait le meilleur moyen de détecter la version d'Office installée ? De plus, si plusieurs versions d'Office sont installées, j'aimerais savoir de quelles versions il s'agit. Un bonus serait de pouvoir détecter la ou les versions spécifiques d'Excel qui sont installées.

0 votes

0 votes

@Mandelbrot : Cela me dit seulement à quelle version je fais référence... mais c'est un MSI que j'écris, donc pas de telles références ici !

0 votes

Ah, bon point. C'est ma faute.

85voto

0xA3 Points 73439

Une façon de vérifier la version d'Office installée serait de vérifier le fichier InstallRoot les clés de registre pour les applications Office qui vous intéressent.

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
Office 2019 - 16.0 (sic!)

Les autres applications ont des touches similaires :

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

Vous pouvez aussi vérifier le chemin racine commun à toutes les applications :

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

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

Par ailleurs, les installations parallèles de différentes versions d'Office ne sont pas officiellement prises en charge par Microsoft. Elles fonctionnent en quelque sorte, mais vous risquez d'obtenir des effets indésirables et des incohérences.

Mise à jour : Office 2019 et Office 365

À partir d'Office 2019, les configurations basées sur les MSI ne sont plus disponibles, le Click-To-Run est la seule façon de déployer Office maintenant. Parallèlement à ce changement vers la mise à jour régulière d'Office 365, les numéros de version majeurs/mineurs 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 le programme Application.Version (par exemple, dans Word) est toujours 16.0 .

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

Si vous devez faire une distinction entre les versions d'Office, par exemple pour vous assurer qu'une certaine fonctionnalité est présente ou qu'une version minimale d'Office est installée, le meilleur moyen est probablement de regarder 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 du fichier d'Office 2019 est 16.0.10730.20102, donc si vous voyez quelque chose de plus que cela, vous avez affaire à Office 2019 ou à une version actuelle d'Office 365.

1 votes

Devons-nous également vérifier HKCU ? Car c'est là que se trouvent mes clés de registre. Merci !

12 votes

Je suis sûr que cela n'a pas besoin d'être dit et que c'est un commentaire quelque peu superflu, cependant, la raison pour laquelle il n'y a pas de version entre 12.0 et 14.0 est la même raison pour laquelle il n'y a pas d'étage numéroté similaire dans les immeubles de grande hauteur.

1 votes

Notez que si vous utilisez la touche Common (pour vérifier la racine commune à toutes les applications bureautiques), cela ne fonctionnera pas dans la version 15.0.

17voto

Jason Points 2150

Si vous avez installé Office 32 bits sur une machine 64 bits, vous devrez peut-être vérifier la présence de "SOFTWARE". \Wow6432Node\Microsoft\Office\12.0\ ", en remplaçant la 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 il existe une version 64 bits.

9voto

J'ai trouvé ce CodeProject qui m'a aidé à résoudre ce problème : http://www.codeproject.com/Articles/26520/Getting-Office-s-Version

8voto

zee Points 135
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;
    }

}
}

2 votes

Cela ressemble à la même solution proposée par Longball27, mais mise à jour pour gérer Office 2010. Il y a deux problèmes avec cette solution. La dll Microsoft.Office.Interop.Word peut ne pas être installée même si Word est installé, par exemple si Word a été installé avant .Net ou si une installation partielle d'Office a été effectuée au lieu d'une installation complète. C'est peut-être le cas le plus typique des installations partielles d'Outlook uniquement - la dll Microsoft.Office.Interop.Outlook correspondante n'est généralement pas installée tant que l'utilisateur n'a pas téléchargé et installé le "Primary Interop Assembly" pour Outlook.

4 votes

L'autre problème (très mineur) est que la clause "default" de l'instruction "switch" dit "Too Old !" pour les versions inconnues. Une cause plus probable de l'exécution de ce code est que la version de Word (ou autre) est trop récente. Cela a été illustré par la mise à jour de ce programme pour gérer Office 2010 - avant que cette mise à jour ne soit appliquée, la version précédente de ce programme disait qu'Office 2010 était trop vieux !

0 votes

Obtention d'une erreur La récupération de la fabrique de classes COM pour le composant avec CLSID {00024500-0000-0000-C000-000000000046} a échoué en raison de l'erreur suivante : 800702e4 L'opération demandée nécessite une élévation. (Exception de HRESULT : 0x800702E4).

0voto

Longball27 Points 518

Vous devez trouver la clé de registre correspondante. Ce lien peut vous aider.

http://www.dreamincode.net/forums/topic/33817-check-for-ms-office-productid/

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X