2009-07-06 10 views
1

Ich erstelle eine C# -Anwendung, die eine CSV-Datei zur Verwendung mit dem Visio-Organigramm-Assistenten exportiert.Wie überprüfe ich programmatisch, ob Visio installiert ist und wo?

Wie kann ich überprüfen, dass eine Installation von Visio vorhanden ist und welchen Pfad?

Die naheliegendste Methode wird überprüft, ob C:\Program Files\Office12\ORGWIZ.EXE vorhanden ist, aber das ist ziemlich abhängig von mit Visio 2007 installiert ..

Mein anderer Gedanke der Registrierung überprüft, aber was ist die zuverlässigste Quelle? Ich habe unter HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Office\ sah, wo es Versionsnummern sind, aber unter ihnen ist ein Visio\InstallRoot, die außer für die Kontrolle jeweils Versionen perfekt sein würde ..

las ich an anderer Stelle, dass ich Uninstall Informationen unter Software\Microsoft\Windows\CurrentVersion\Uninstall\ überprüfen können, aber das sieht ziemlich kompliziert für Windows-Komponenten ...

+0

whereis visio ... Oh, Moment mal ... – PostMan

Antwort

5

Ich würde nach HKEY_CLASSES_ROOT \ Visio.Application in der Registrierung suchen. Wenn es nicht existiert, keine Installation. Wenn es der CurVer Unterschlüssel, den Sie nicht vorhanden ist, gibt so etwas wie Visio.Application.12 , die Standardversion erzählt, das installiert wird

HKEY_CLASSES_ROOT (vielleicht andere sein) \ Visio.Application.12 Sub Key CLSID wird geben Sie eine guid: {00021A20-0000-0000-C000-000000000046}

HKEY_CLASSES_ROOT \ CLSID {00021A20-0000-0000-C000-000000000046} wiederum geben Ihnen Sub Key "LocalServer32" Welche enthalten der Weg zur EXE.

C: \ PROGRA ~ 1 \ MICROS ~ 4 \ Office12 \ Visio.exe/Automatisierung

Wie Sie sehen können, in meinem Fall hat es den kurzen Weg Form.

1

Konnten Sie einfach überprüfen, ob die Visio-Dateierweiterung registriert ist und zu welcher Anwendung?

http://www.dreamincode.net/code/snippet3159.htm

Blick in HKEY_CLASSES_ROOT\\.vsd, ist der Schlüssel exist, was sind die Werte? Vergleichen Sie sie mit einer Reihe von Werten, die angeben, dass die Anwendung installiert ist.

+0

Ja, das Schlüssel ist .. Es gibt in der Art und Weise von Werten nicht viel zu verbinden es zu einer Installation - der 'PersistentHandler' Hash stimmt mit nichts anderem in der Registrierung überein (ich hatte gehofft, dass es unter der Deinstallationsinfo war). – brasskazoo

+0

Auf meinem Computer ist der Standardwert für den Schlüssel ein REG_SZ mit dem Wert" Visio.Drawing.11 " – marcc

+0

Nur dazu :) - HKLM \ SOFTWARE \ Classes \ Visio.Drawing.11 \ protocol \ server führt mich zu einem visio.exe Pfad! – brasskazoo

3

Hier ist meine Lösung, bezogen auf Roger's Antwort:

RegistryKey regVersionString = Registry.ClassesRoot.OpenSubKey("Visio.Drawing\\CurVer"); 
    Console.WriteLine("VERSION: " + regVersionString.GetValue("")); 

    RegistryKey regClassId = Registry.ClassesRoot.OpenSubKey(regVersionString.GetValue("") + "\\CLSID"); 
    Console.WriteLine("CLSID: " + regClassId.GetValue("")); 

    RegistryKey regInstallPath = Registry.ClassesRoot.OpenSubKey("CLSID\\" + regClassId.GetValue("") + "\\LocalServer32"); 
    Console.WriteLine("PATH: " + regInstallPath.GetValue(""));