如何以编程方式检查是否已安装Visio,以及在哪里?

时间:2009-07-06 02:47:10

标签: c# registry ms-office visio

我正在构建一个C#应用程序,用于导出要与Visio组织结构图向导一起使用的CSV文件。

如何检查Visio的安装是否存在,以及路径是什么?

最明显的方法是检查C:\Program Files\Office12\ORGWIZ.EXE是否存在,但这完全取决于安装Visio 2007 ..

我的另一个想法是检查注册表,但最可靠的来源是什么?我查看了HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Office\下有版本号的地方,但是在它们下面是Visio\InstallRoot,除了检查每个版本外,这将是完美的。

我在别处读到我可以在Software\Microsoft\Windows\CurrentVersion\Uninstall\下查看卸载信息,但对于Windows组件来说这看起来相当复杂......

3 个答案:

答案 0 :(得分:5)

我会查找 HKEY_CLASSES_ROOT \ Visio.Application在注册表中。 如果它不存在,则不安装。 如果确实存在,CurVer子键将为您提供类似Visio.Application.12的内容 这告诉你安装的DEFAULT版本(可能是其他版本)

HKEY_CLASSES_ROOT \ Visio.Application.12子键CLSID将为您提供指导: {00021A20-0000-0000-C000-000000000046}

HKEY_CLASSES_ROOT \ CLSID {00021A20-0000-0000-C000-000000000046}反过来会给你 子键“LocalServer32” 其中包含EXE的路径。

C:\ PROGRA~1 \ MICROS~4 \ Office12 \ VISIO.EXE / Automation

正如您所看到的,在我的情况下,它有短路径形式。

答案 1 :(得分: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(""));

答案 2 :(得分:1)

您是否可以检查是否已注册Visio文件扩展名以及应用程序?

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

查看HKEY_CLASSES_ROOT\\.vsd,密钥是否存在,值是什么?将它们与一组指示应用程序已安装的值进行比较。