solucion - C#: ¿Cómo saber si cierta aplicación de Office 2003 o 2007 está instalada?
word no abre (2)
Esto debería funcionar, como se describe aquí . No es una solución muy elegante, ya que es específica de la versión y se romperá con la próxima versión de la oficina. Este ejemplo es para Office 2003, por lo que no funcionará con Office 2007 sin actualizar.
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;
}
}
Necesito saber si Microsoft Word, Excel, Outlook, Project, etc. están instalados en una aplicación Windows Forms .net 2.0 C #.
El primer intento fue simplemente intentar crear los objetos de la aplicación y detectar cualquier excepción, pero esto lleva demasiado tiempo.
¿Hay alguna forma más rápida de detectar esto? ¿Como verificar valores de registro u otra técnica con los contenedores COM?
Puede usar las API de MSI (Windows Installer) para averiguar si los códigos relevantes de producto / paquete / componente están presentes en la máquina. Estos son bastante simples de usar a través de P / Invoke.
Alternativamente, puede buscar en el registro. Word 2007, por ejemplo, coloca su ubicación de instalación en HKLM/SOFTWARE/Microsoft/Office/12.0/Word/InstallRoot
.
Esto no lo ayudará si planea usar los componentes de interoperabilidad, pero sí le informa, con razonable certeza, si las diversas cosas están instaladas.