2

我正在构建一个 C# 应用程序,它导出一个 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 组件来说看起来相当复杂......

4

3 回答 3

5

我会在注册表中查找 HKEY_CLASSES_ROOT\Visio.Application 。如果不存在,则不安装。如果它确实存在,CurVer 子键会给你类似 Visio.Application.12 告诉你安装的默认版本(可能是其他版本)

HKEY_CLASSES_ROOT\Visio.Application.12 Sub Key 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 /自动化

如您所见,在我的情况下,它具有短路径形式。

于 2009-07-06T03:07:40.340 回答
3

这是我的解决方案,基于罗杰的回答:

    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(""));
于 2009-07-06T04:48:18.177 回答
1

您能否检查一下 Visio 文件扩展名是否已注册,以及注册到什么应用程序?

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

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

于 2009-07-06T02:51:25.313 回答