El problema es simple, ¿cómo hacer para escoger con cual suite ofimática (LibreOffice o OpenOffice) abrir un documento usando la biblioteca UNO?
Al principio pensé que la biblioteca por si sola reconocía cual suite estaba instalada y con esa abría el documento, sin embargo, al probrar el programa en un ambiente SOLO con LibreOffice me dió un error y nunca abrió el documento (esta fue la primera prueba de concepto).
Investigando un poco encontré que tal vez podía indicar que editor usar si me conectaba por un socket (simulando usar AOO de otra máquina) en localhost, pues así se debe de especificar la ruta donde se encuentra el ejecutable. Pero como no todo lo que brilla es oro, al probar esa opción ni siquiera puedo abrir OpenOffice; pues me da el siguiente error:
---------------------------------------------------------------------------------------------------------------------------------------------------
Connector : couldn't connect to socket (WSANOTINITIALISED, WSAStartup() has not been called)
Server stack trace:
Exception rethrown at [0]:
at System.Runtime.Remoting.Proxies.RealProxy.HandleReturnMessage(IMessage reqMsg, IMessage retMsg)
at System.Runtime.Remoting.Proxies.RealProxy.PrivateInvoke(MessageData& msgData, Int32 type)
at unoidl.com.sun.star.bridge.XUnoUrlResolver.resolve(String sUnoUrl)
---------------------------------------------------------------------------------------------------------------------------------------------------
Esta es la función (en C#) que utilizo para inicializar el editor:
Código: Seleccionar todo
private XComponentLoader CargarEditorOpenOffice()
{
XComponentContext contexto = null;
XMultiServiceFactory multiServiceFactory = null;
XComponentLoader editorOpenOffice = null;
string rutaUnoIniAOO = "file:///C:/Program Files (x86)/OpenOffice 4/program/uno.ini";
try
{
contexto = uno.util.Bootstrap.defaultBootstrap_InitialComponentContext(rutaUnoIniAOO, null);
XMultiComponentFactory xLocalServiceManager = contexto.getServiceManager();
XUnoUrlResolver xUrlResolver = (XUnoUrlResolver)xLocalServiceManager.createInstanceWithContext("com.sun.star.bridge.UnoUrlResolver", contexto);
multiServiceFactory = (XMultiServiceFactory)xUrlResolver.resolve("uno:socket,host=localhost,port=8100;urp;StarOffice.ServiceManager")
//contexto = uno.util.Bootstrap.bootstrap();
//multiServiceFactory = (XMultiServiceFactory)contexto.getServiceManager();
editorOpenOffice = (XComponentLoader)multiServiceFactory.createInstance("com.sun.star.frame.Desktop");
}
catch (System.Exception ex)
{
_LogErrores.EscribirLog(ex.Message + Environment.NewLine + ex.StackTrace,
this.GetType().Name,
System.Reflection.MethodInfo.GetCurrentMethod().Name);
}
finally
{
//Liberamos la memoria
contexto = null;
multiServiceFactory = null;
}
return editorOpenOffice;
}
O saben por qué me da el error a la hora de conectar el socket???
Nota:
Mi ambiente de desarrollo es en Windows 7, visual studio 2012 y tengo instalado OpenOffice 4.1.1 y LibreOffice 4.1.1.2