2009-07-06 149 views
1

我正在構建一個C#應用程序,用於導出要與Visio組織結構圖嚮導一起使用的CSV文件。如何以編程方式檢查Visio是否已安裝以及在哪裏?

如何檢查Visio的安裝是否存在以及路徑是什麼?

最明顯的方法是檢查是否存在C:\Program Files\Office12\ORGWIZ.EXE,但這是相當依賴於具有安裝了Visio 2007 ..

我的另一個想法是檢查註冊表,但什麼是最可靠的來源?我HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Office\那裏有版本號看了下,但它們下面是一個Visio\InstallRoot這將是除了檢查每個版本完美..

我看別的地方,我可以Software\Microsoft\Windows\CurrentVersion\Uninstall\下檢查,卸載信息,但是這看起來相當複雜對於Windows組件...

+0

whereis的Visio ...哦,等一下... – PostMan 2009-07-06 04:05:31

回答

5

我會在註冊表中查找 HKEY_CLASSES_ROOT \ Visio.Application。 如果不存在,請勿安裝。 如果它確實存在,CURVER子鍵會給你像Visio.Application.12 ,告訴你所安裝的DEFAULT版本(可能是其他人)

HKEY_CLASSES_ROOT \ Visio.Application.12子項CLSID會給你一個GUID: {00021A20-0000-0000-C000-000000000046}

HKEY_CLASSES_ROOT \ CLSID {00021A20-0000-0000-C000-000000000046}反過來會給你 的子鍵 「LocalServer32」 其中將包含到EXE的路徑。

C:\ PROGRA〜1 \ MICROS〜4 \ OFFICE12 \ VISIO.EXE /自動化

正如你所看到的,在我的情況下,它的短路徑形式。

1

您可以檢查Visio文件擴展名是否已註冊,以及應用程序是什麼?

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

查找範圍HKEY_CLASSES_ROOT\\.vsd,並重點存在,有什麼價值?將它們與一組表示應用程序已安裝的值進行比較。

+0

是的,關鍵是有..沒有太多的價值觀的方式連接它到一個安裝 - 「PersistentHandler」哈希不匹配註冊表中的其他任何東西(我希望它是在卸載信息) – brasskazoo 2009-07-06 03:01:03

3

這裏是我的解決方案,基於Roger's答案:

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("")); 
相關問題