Pregunta

Tengo una aplicación Win32 que incluye un EXE, un control ActiveX (DLL) y un servidor COM (EXE) y estoy usando Inno Setup 5 para construir mi instalador. Muchos de nuestros clientes usan cuentas de usuario limitadas donde el usuario no tiene derechos de administrador y debido a que los componentes COM requieren estar registrados (que escribe en HKEY_CLASSES_ROOT), mi archivo de configuración debe ejecutarse con privilegios elevados (admin). Creo que esto es inevitable (lamentablemente, no puedo usar COM sin registro debido al servidor EXE COM que tengo). Sin embargo, me gustaría crear un instalador de actualizaciones que se pueda ejecutar como usuario limitado y estoy buscando algunos consejos.

Lo que estoy pensando es lo siguiente:

  • La configuración inicial (instalación por primera vez) instala la aplicación en% ALLUSERSPROFILE% \ Application Data \ CompanyName \ AppName en lugar de% PROGRAMFILES%. Los componentes COM se registran de forma normal (ya que aún no existen).
  • Las actualizaciones posteriores (usando una secuencia de comandos Inno Setup diferente) simplemente copiarán los nuevos archivos en% ALLUSERSPROFILE% \ Application Data \ CompanyName \ AppName. Con suerte, incluso un usuario limitado tendrá acceso de escritura a esta carpeta y como los componentes COM ya se han registrado, no se requerirá acceso de administrador.

Esto significaría que mis clientes podrían actualizar a la última y mejor versión sin la molestia de usar una cuenta de administrador. ¿Es esto aceptable o es probable que me muerda en la parte trasera? Estoy bastante seguro de que Google Chrome hace algo similar, pero como no tiene componentes COM (por lo que puedo decir), incluso la configuración inicial puede ser como un usuario limitado.

Cualquier consejo de otros que hayan enfrentado este problema sería muy bienvenido.

¿Fue útil?

Solución

No estoy seguro, pero parece que recuerdo que los servidores COM admiten la instalación por usuario, y tal vez eso también se aplica a los servidores EXE.

Si es así, cambie su código de registro para escribir información en HKEY_CURRENT_USER \ Software \ Classes en lugar de HKEY_CLASSES_ROOT .

La infraestructura COM debería realizar la búsqueda primero por usuario y luego por máquina.

Vale la pena experimentar de todos modos.

Otros consejos

Bien, encontré una manera de crear un script de instalación de usuario limitado con mi servidor COM y los objetos COM registrados por usuario.

Estoy usando la última versión de ATL (v9) que se incluye con MSVC 2008 para crear mi servidor COM y mis objetos COM. Resulta que puede registrar el servidor COM por usuario a través del nuevo conmutador / RegServerPerUser . Probé esto con cuentas de usuario limitadas en XP, Vista y Windows 7 y funciona perfectamente.

A continuación, los controles COM. De nuevo, ATL9 al rescate. Puede registrar un control por usuario asegurándose de que RegSvr32 llama a la función DllInstall de su control y le pasa un parámetro de línea de comandos de user . Por lo tanto, para registrar un control de esta manera simplemente debe hacer:

regsvr32.exe /i:user /n MyControl.DLL

Nuevamente, probé esto en XP, Vista y Windows 7 y funciona bien.

Luego realicé los siguientes cambios en mi script Inno Setup:

  • La carpeta de instalación predeterminada será {pf} (es decir, C: \ Archivos de programa) si el usuario tiene derechos de administrador. De lo contrario, el valor predeterminado es {commonappdata} (es decir, C: \ Documents and Settings \ All Users).
  • Registre mi servidor COM utilizando el nuevo conmutador / RegServerPerUser .
  • Eliminé las banderas regserver de mis objetos COM y en su lugar agregué soporte para llamar a regsvr32 usando el nuevo interruptor 'user'.

Todos estos cambios son fáciles de hacer usando la función Inno Setup {code} .

Gracias a Kim por establecerme la ruta de instalación de COM por usuario.

Si dejó de usar inno-setup y usó MSI, los archivos MSI respaldan la idea de la instalación limitada de parches por parte del usuario. Un administrador debe autorizar la instalación inicial, a partir de entonces, las firmas digitales en los archivos msi de parches son procesadas por el servicio msi elevado sin requerir la elevación del usuario.

Puede duplicar esta idea básica usted mismo: durante una instalación administrativa inicial, instale un componente de servicio que tenga el acceso necesario. Al procesar parches, solicite al proceso de servicio que procese los registros del servidor EXE COM.

Debe repensar su enfoque ... el acceso de escritura a una carpeta que también puede permitir la ejecución del programa por el mismo usuario es la causa del 99% de todas las funciones de virus / malware. Aprenda un poco sobre la Política de restricción de software y el nuevo comportamiento de App Locker integrado en Windows 7 para que la infraestructura informática pueda avanzar y no retroceder.

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