我正在构建一个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组件来说这看起来相当复杂......
答案 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
,密钥是否存在,值是什么?将它们与一组指示应用程序已安装的值进行比较。