Come rilevare la versione installata di MS-Office?

Qualcuno sa quale sarebbe il modo migliore per rilevare quale versione di Office è installata? Inoltre, se sono installate più versioni di Office, mi piacerebbe sapere quali versioni sono. Un bonus sarebbe se riesco a rilevare la versione specifica (s) di Excel che è (/ sono) installato.

Un modo per verificare la versione di Office installata consiste nel controllare le chiavi del Registro di sistema di InstallRoot per le applicazioni di Office di interesse.

Ad esempio, se si desidera verificare se Word 2007 è installato, è necessario verificare la presenza della seguente chiave del Registro di sistema:

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

Questa voce contiene il percorso dell’eseguibile.

Sostituisci 12.0 (per Office 2007) con il numero di versione corrispondente:

 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

Le altre applicazioni hanno chiavi simili:

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

Oppure puoi controllare il percorso root comune di tutte le applicazioni:

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

Un’altra opzione, senza utilizzare chiavi del Registro di sistema specifiche, è quella di interrogare il database MSI utilizzando l’API MSIEnumProducts come descritto qui .

Per inciso, le installazioni parallele di diverse versioni di Office non sono ufficialmente supportate da Microsoft. Funzionano in qualche modo, ma potresti ottenere effetti indesiderati e incongruenze.

Che ne dici di HKEY_CLASSES_ROOT \ Word.Application \ CurVer?

Se hai installato Office a 32 bit su un computer a 64 bit, potrebbe essere necessario verificare la presenza di “SOFTWARE \ Wow6432Node \ Microsoft \ Office \ 12.0 \”, sostituendo il 12.0 con la versione appropriata. Questo è certamente il caso per Office 2007 installato su Windows 7 a 64 bit.

Si noti che Office 2010 (== 14,0) è il primo Office per il quale esiste una versione a 64 bit.

Ho trovato questo CodeProject che mi ha aiutato con questo problema: 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; } } } 

Perché non controllare HKLM\\SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\App Paths\\[office.exe] , dove [office.exe] acronimo di un particolare prodotto di ufficio exe-filename, ad esempio winword.exe , excel.exe ecc. Si ottiene il percorso dell’eseguibile e si controlla la versione di quel file.

Come verificare la versione del file: in C ++ / in C #

Qualche critica nei confronti di tale approccio?

Un bonus sarebbe se riesco a rilevare la versione specifica (s) di Excel che è (/ sono) installato.

So che la domanda è stata fatta e ho risposto molto tempo fa, ma questa stessa domanda mi ha tenuto impegnato fino a quando ho fatto questa osservazione:

Per ottenere il numero di build (ad es. 15.0.4569.1506 ), analizzare HKLM\SOFTWARE\Microsoft\Office\[VER]\Common\ProductVersion::LastProduct , dove [VER] è il numero di versione principale (12.0 per Office 2007, 14.0 per Office 2010, 15.0 per Office 2013).

Su un sistema Windows a 64 bit, è necessario inserire Wow6432Node tra il SOFTWARE e le briciole di Microsoft , indipendentemente dalla versione dell’installazione di Office.

Sulle mie macchine, questo fornisce le informazioni sulla versione della versione originariamente installata. Ad esempio, per Office 2010 i numeri corrispondono a quelli elencati qui e differiscono dalla versione riportata in File > Help , che riflette le patch applicate dagli hotfix.

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