C#:如何知道是否安装了某些Office 2003或2007应用程序?

时间:2009-02-10 09:36:10

标签: c# .net ms-office

我需要知道Microsoft Word,Excel,Outlook,Project等是否安装在Windows Forms .net 2.0 C#应用程序中。
第一次尝试只是尝试创建应用程序对象并捕获任何异常,但这太耗费时间了 有没有更快的方法来检测这个?比如使用COM包装器检查注册表值或其他技术吗?

2 个答案:

答案 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

如果您计划使用互操作组件,这对您没有帮助,但确实会合理确定地告诉您是否安装了各种内容。