ms-word - usar - visual basic 2017 caracteristicas
MS Office Word VSTO "Load On Demand" (2)
Aparte de configurar el UAC en "No notificar nunca", no conozco una forma de superar sus problemas directamente. Sin embargo, voy a sugerir una solución que le permitirá cargar básicamente a pedido .
Le sugiero que cambie el LoadBehavior de su complemento LoadBehavior
a 0x0
(descargado - No cargar automáticamente) y luego use un comando VBA en una plantilla cargada automáticamente para controlar cuándo se carga su complemento. Aquí hay un resumen de los pasos a seguir:
- En Visual Studio, asegúrese de que la cinta en su complemento esté codificada como un archivo XML (no creado con el Diseñador visual). Dentro de esta cinta define un espacio de nombres personalizado.
- Crear una plantilla de Word (
.dotm
). Usando el Editor de IU personalizado para Microsoft Office incrustar dentro de esta plantilla el XML para una pestaña de cinta que está etiquetada y colocada de la misma manera que la de su complemento. Defina el espacio de nombres en el XML igual que el de su código de Visual Studio XML para que compartan el mismo espacio de nombres. Además, defina un botón que cargará su complemento (y quizás también haga funciones adicionales dentro de su complemento). Dentro de su Plantilla, escriba un sub para cargar su complemento
0x0
descargado usando este código:Application.COMAddIns(ProgID).Connect = True
ProgID
es el elemento idex de su ProgID o el nombre real de ProgID entre comillas.Dentro de su plantilla, escriba una devolución de llamada que llame al código para cargar el complemento desde el botón.
Coloque la plantilla en el directorio de inicio de Word. Para Word 2010 que es
C:/Program Files (x86)/Microsoft Office/Office14/STARTUP
Lo que queremos que suceda es que cuando se inicia Word, el complemento VSTO se instala pero no se carga. La plantilla que creó SE carga automáticamente desde el directorio de INICIO y coloca la pestaña de la cinta de opciones para su aplicación dentro de Word. Debido a que el complemento VSTO no está cargado, esos controles no están visibles actualmente. Sin embargo, después de implementar los pasos anteriores, cuando se hace clic en el botón del XML de la plantilla, su complemento cargará sus controles en la misma cinta porque comparten un espacio de nombres. Y cuando Word se cierra y se reinicia, se restablece al complemento VSTO que se instala pero no se carga.
Llevando esto un paso más allá, si quisiera evitar el clic adicional de cargar los controles de complemento de VSTO, posiblemente podría recrear el XML del complemento de VSTO dentro de la plantilla y tener cada código de llamada de control para cargar su complemento de VSTO, ocultar los controles de cinta de la plantilla, y realizar la funcionalidad de su complemento. De esta manera usted tendría su cinta de marcador de posición proporcionada por el XML de la plantilla y el real complemento de carga y realización de acciones a pedido.
Hemos desarrollado un producto que es un complemento estándar de VSTO (Word 2010 y Word 2013, solo x86). De forma predeterminada, cuando se instala, se instala para todos los usuarios (es decir, las entradas de registro de complemento se insertan en HKLM - HKEY_LOCAL_MACHINE/SOFTWARE/[Wow6432Node]/Microsoft/Office/Word/Addins
).
Cuando el valor para la clave reg de LoadBehavior
se establece en 0x3
(es decir, "Cargar al inicio"), el complemento funciona perfectamente bien, sin embargo, cuando configuramos el valor de LoadBehavior
en 0x10
(es decir, "Carga a pedido"), el complemento no lo hace. trabajar como esperaríamos:
Debido a UAC (y que Word no se ejecuta elevado), el valor de LoadBehavior
en HKLM no se cambia de 0x10
a 0x9
sino que se reemplaza al crear una clave LoadBehavior
(con valor 0x9
) en la sección HKCU.
Desafortunadamente, hemos encontrado que este valor anulado de HKCU no se tiene en cuenta a menos que la clave de manifiesto esté presente en la sección de HKCU junto con LoadBehavior
) . Más información sobre este tema relacionado: https://social.msdn.microsoft.com/Forums/vstudio/en-US/3776734b-333e-423b-9c08-7c7a441c3e94/load-behavior-and-word-addin?forum=vsto
El remedio "obvio" para este problema es escribir el Manifest
en HKCU para cada usuario (así como en HKLM) en el momento de la instalación O cuando cada usuario ejecute el complemento por primera vez. Sin embargo, hay algunos inconvenientes serios con este enfoque:
- Desinstalar el complemento requiere eliminar todos los valores de HKCU de los usuarios para evitar que los usuarios experimenten problemas de carga (esto no se recomienda y plantea otros problemas / complicaciones, como la necesidad de utilizar la Configuración activa: eliminar las claves de registro en HKCU en una instalación por máquina ).
- Los usuarios que tienen estos valores en su sección HKCU (en itinerancia) experimentan problemas cuando inician sesión en una máquina en el mismo dominio que no tiene nuestro complemento instalado.
¿Es un error que el manifiesto no se obtiene de HKLM donde el LoadBehavior
se establece adecuadamente en HKCU? Creo que este problema se resolvería si el LoadBehavior
en HKLM se pudiera anular en HKCU sin la necesidad de que el valor del Manifest
se anule también.
¿Alguien sabe de alguna manera de superar este problema?
Lo más probable es que la razón por la que está utilizando Load On Demand es mejorar el rendimiento de inicio como se describe en MSDN . Sin embargo, la carga bajo demanda viene con todo un conjunto de problemas (no hay soporte para el estado dinámico de la interfaz de usuario de la cinta de opciones, problemas con la implementación de HKLM, etc.).
Como ya ha dicho, no hay problemas con Cargar al inicio . Por lo tanto, la forma recomendada de cargar su complemento es usar un valor de LoadBehavior
de 0x3
.
Si tiene problemas con el rendimiento de carga de sus complementos, una solución podría ser usar un complemento liviano que siempre se cargue al inicio y luego este complemento actúe como un cargador para el complemento real.