Pregunta

Una solución para llamar a regaM sin los derechos de administrador ya se describió aquí:

com proxop sin regasm

Estoy tratando de crear una biblioteca COM que mis usuarios pueden implementar y usar desde Excel VBA sin los privilegios de administración. Me gustó la solución de regancia, ya que parece que las personas no tienen mucho éxito con el uso de objetos com sin registro de Excel VBA. También quiero una vinculación temprana para que mis usuarios puedan beneficiarse de la finalización de la sintaxis.

La respuesta aceptada en la pregunta mencionada anteriormente, sin embargo, no describe dónde colocar la DLL de la Asamblea en la computadora del usuario. Se requieren derechos de administrador para instalar el ensamblaje en el GAC, por lo que me pregunto dónde se puede colocar el archivo DLL. Supongo que el DIR de la aplicación está siendo buscado a cualquier DLL referenciada, pero no puedo volver a poner mi DLL en el DIR de Excel sin los derechos de administrador nuevamente. ¿Es posible usar la solución con el cliente de Excel? ¿Hay alguna otra forma de llamar a los objetos COM de VBA sin la necesidad de los privilegios de administración para implementarlos primero?

¿Fue útil?

Solución

Llamar a regaM sin derechos administrativos para COM INTEROP

Creo que debería ser posible usar RegistrationServices.RegisterAssembly y RegOverridePredefKey APIs juntos para implementar el registro automático bajo la colmena de HKCU, de una manera amigable para la UAC.He publicado una respuesta más detallada aquí .

Otros consejos

Sí, ahora tiene dos problemas, no puede ponerlo en cualquier lugar que deba ponerlo, como el GAC o A C: \ Archivos de programa Subdirectory. Dado que esas ubicaciones también requieren la elevación de la UAC. Probablemente también se olvidó de ejecutar regasm.exe con la opción / CodeBase, requerida para decirle al CLR dónde buscar el archivo.

El usuario debe tener suficientes privilegios para copiar la DLL a un directorio que tiene acceso a la escritura. Normalmente, solo es solo un directorio en C: \ Users \ Nombre de usuario, como el subdirectorio de AppData. El dolor de cabeza tendrá que abordar que el archivo .reg debe adaptarse para cada usuario individual, ya que su nombre de usuario es diferente. Por lo tanto, el valor CodeBase en el archivo .reg debe cambiarse para cada usuario. Esto se escapa mal, para ponerlo ligeramente.

La respuesta que encontraste no es una muy buena. La única solución que realmente funciona es escribir su propia función de registro. Uno que escribe las claves de registro en HKCU en lugar de HKLM. Use la [ COMPUERTEFUNCIÓN DE COMPUERTOR] ATRIBUTE . Usted sabe desde el archivo .reg qué teclas necesita escribir. Y usas ensamblaje. OxyExecutingSembly (). Ubicación para averiguar qué escribir para el valor de registro de CodeBase. No olvides la [ComunregerFunction].

Tenga en cuenta que, al menos en espíritu, está tratando de navegar alrededor de las restricciones que el administrador de LAN impuso a estos usuarios. Se preocupan mucho por saber qué tipo de código se ejecuta en las máquinas que apoyan. Esto puede ponerse en problemas, al menos hablar con el chico.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top