我需要知道Microsoft Word,Excel,Outlook,Project等是否安装在Windows Forms .net 2.0 C#应用程序中。
第一次尝试只是尝试创建应用程序对象并捕获任何异常,但这太耗费时间了
有没有更快的方法来检测这个?比如使用COM包装器检查注册表值或其他技术吗?
答案 0 :(得分:3)
这应该有效,如here所述。然而,这不是一个非常优雅的解决方案,因为它是特定于版本的,并将打破下一个办公室版本。此示例适用于Office 2003,因此在未更新的情况下无法与Office 2007一起使用。
const string ASSEMBLY2003 = "Microsoft.Office.Interop.Excel, Version=11.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c";
static bool IsAssemblyInstalled(string assembly)
{
try
{
s_assemblyExcel = Assembly.Load(assembly);
return true;
}
catch
{
return false;
}
}
答案 1 :(得分:3)
您可以使用MSI(Windows Installer)API查明计算机上是否存在相关的产品/包/组件代码。这些通过P / Invoke非常简单。
或者,您可以查看注册表。例如,Word 2007将其安装位置设置为HKLM\SOFTWARE\Microsoft\Office\12.0\Word\InstallRoot
。
如果您计划使用互操作组件,这对您没有帮助,但确实会合理确定地告诉您是否安装了各种内容。