Hallo Forum,
ich habe eine WinForms Anwendung die viele dolle Dinge tut, unter anderem erzeugt sie ein TabControl, welches auf 2 seiner Tabs Grafiken darstellt. Selbige Grafiken werden in einer separaten Klasse mit Excel erzeugt (GDI+ war mir zu fisselig).
Jetzt setzt dieses Vorgehen natürlich vorraus das auf dem PC Excel installiert ist, andernfalls sollen die 2 Tabs deaktiviert werden.
Also muss herausgefunden werden ob Excel (bzw. Office) installiert ist, bis jetzt schaut das so aus:
C#-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20:
| private bool isExcelInstalled() { string programName = "Microsoft Office"; string uninstallList = @"SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall"; object obj; Microsoft.Win32.RegistryKey RegKeyUninstallList = Microsoft.Win32.Registry.LocalMachine; Microsoft.Win32.RegistryKey SubKeyUninstallList = Microsoft.Win32.Registry.LocalMachine;
foreach (string subKey in RegKeyUninstallList.OpenSubKey(uninstallList).GetSubKeyNames()) { obj = SubKeyUninstallList.OpenSubKey(uninstallList + "\\" + subKey).GetValue("DisplayName"); if (obj != null) { if (obj.ToString().ToLower().Contains(programName.ToLower())) return true; } }
return false; } |
Funktioniert soweit auch, mein Problem ist jetzt eher der "programName" nachdem gesucht wird. In dem Stück Code oben suche in nach "Microsoft Office", dummerweise setzt da ein Treffer nicht vorraus das auch Excel da ist. Es gibt zBsp den Microsoft Office Viewer, den Microsoft Office Communicator, und die geben auch alle true zurück.
Klar, ich kann auch nach "Microsoft Office Proffesional 2003" suchen, dann wirds bei mir hier super laufen, aber was wenn jmd nicht Proffesional hat, oder die 2010er Version, oder oder oder...
Wie kann ich wirklich sicherstellen das Excel installiert ist ? Gibt es vlt irgendwo eine Liste aller gängigen OfficeBezeichnungen auf die ich Abfragen könnte ? Oder gar einen ganz anderen Ansatz als meinen ?
Für Hilfe wär ich dankbar.