C #: Как узнать, установлено ли определенное приложение Office 2003 или 2007? - PullRequest
2 голосов
/ 10 февраля 2009

Мне нужно знать, установлены ли Microsoft Word, Excel, Outlook, Project и т. Д. В приложении Windows Forms .net 2.0 C #.
Первая попытка состояла в том, чтобы просто попытаться создать объекты приложения и перехватить любое исключение, но это слишком много времени.
Есть ли более быстрый способ обнаружить это? Например, проверка значений реестра или другой метод с обертками COM?

Ответы [ 2 ]

3 голосов
/ 10 февраля 2009

Вы можете использовать API-интерфейсы MSI (Windows Installer), чтобы узнать, присутствуют ли на аппарате соответствующие коды продуктов / пакетов / компонентов. Они довольно просты в использовании через P / Invoke.

В качестве альтернативы вы можете посмотреть в реестре. Например, в Word 2007 место установки устанавливается на HKLM\SOFTWARE\Microsoft\Office\12.0\Word\InstallRoot.

Это не поможет вам, если вы планируете использовать компоненты взаимодействия, но действительно сообщает вам, с достаточной уверенностью, установлены ли различные компоненты.

3 голосов
/ 10 февраля 2009

Это должно работать, как описано здесь . Однако это не очень элегантное решение, так как оно зависит от версии и не будет соответствовать следующей версии для офиса. Этот пример предназначен для 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;  
   }  
} 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...