2010-03-31 1 views
8

En esta pregunta anterior < How to get COM Server for Excel written in VB.NET installed and registered in Automation Servers list?> hay un ejemplo de cómo crear la ruta completa a una clave de registro usando VS 2008. Todo en la respuesta anterior funciona correctamente, excepto en la ruta completa que estoy configurando (utilizando el editor de registro en VS) para que mscoree.dll no funcione (lo que significa que no parece hacer nada).Problema al registrar un servidor COM escrito para Excel registrado en el equipo cliente (no se puede establecer la ruta completa a mscoree.dll)

La ruta del registro completo es:

HKEY_CLASSES_ROOT \ CLSID \ {my_GUID} \ InprocServer32 \ (por defecto)

y el valor me he fijado es:

[SystemFolder] mscoree.dll

Puedo poner cualquier cosa (incluso hardcoding la ruta completa) pero la configuración no parece importar y el registro siempre contiene mscoree.dll sin ninguna ruta.

He intentado agregar otro valor a la ruta de registro a través de VS y funciona correctamente, incluida la ruta completa tal como especifica [SystemFolder].

La razón por la que necesito la ruta completa (como se explicó en la pregunta anterior) es que sin la ruta, Excel genera un error cuando se selecciona el servidor de automatización ya que no puede encontrar mscoree.dll (curiosamente aunque recibo un error el registro funciona bien).

Estoy haciendo la instalación a través de un proyecto de configuración que de lo contrario funciona bien.

Estoy instalando en un sistema VISTA * 64 pero he recibido el mismo error en otros sistemas operativos.

¿Alguien sabe lo que estoy haciendo mal?

Respuesta

1

No lo probé, pero supongo que está relacionado con cuándo VS.NET ingresa su clave de registro "[SystemFolder] mscoree.dll". Estaba trabajando en la publicación original. Podría ser porque VS.NET estaba ejecutando el "regasm/regfile" primero y luego sobrescribiendo esa clave con "[SystemFolder] mscoree.dll"

En su caso, no funciona porque VS.NET pone su clave de registro "[SystemFolder] mscoree.dll" en la tabla de registro de MSI primero y luego su valor fue sobrescrito por los valores de salida de "regasm/regfile".

Para descartar la posibilidad de que VS.NET sobrescriba su valor, creo que puede marcar su archivo DLL vsdrpDoNotRegister. Entonces, VS.NET no hará magia en su tabla de registro. Ahora, estás por tu cuenta para hacer el registro de complementos correctamente. Sin embargo, como dijo el original, todo lo que VS.NET hizo fue simplemente llamar a "regasm/regfile". ¿Por qué no lo haces tú mismo? Una vez que obtenga el archivo .reg de "regasm/regfile your.dll", lo único que debe hacer es importarlo a la tabla de registro. Haga clic derecho en el "Registro en la máquina de destino" y haga clic en el menú "Importar ...". Eso es. No es tan dificil. Después de importar su archivo de registro, debería ver la siguiente clave

HKEY_CLASSES_ROOT\CLSID\{my_GUID}\InprocServer32\(default) 

El valor todavía debe establecerse en mscoree.dll. Ahora puede cambiarlo a [SystemFolder] mscoree.dll.

Cuestiones relacionadas