¿Cómo COM CoCreateInstanceEx tratar de tipos de carga (para que no sea administrador victoria usuario)?

StackOverflow https://stackoverflow.com/questions/4595190

  •  15-10-2019
  •  | 
  •  

Pregunta

Tengo un problema muy complicado que se produce sólo para usuarios de Windows que no sean administradores.

ejecuto un script de que residen en el escritorio y llama a una función en un DLL de C ++. A continuación, el flujo es como sigue:

  1. Mi C ++ DLL crea un proceso Delphi, enviándole un GUID como un parámetro.
  2. En la inicialización, mi proceso Delphi registra una clase de C con el GUID dado usando una factoría de objetos COM.
  3. Mi C ++ DLL intentos para llamar CoCreateInstanceEx con el mismo GUID. ==> La operación falla con HResult 0x80029C4A Error de tipo de carga / DLL.

Sin excepción desde el lado Delphi - registro parece funcionar sin problemas.

utiliza monitor de proceso y una sierra para mi sorpresa que cuando CoCreateInstanceEx se llama, hay un intento de leer mi archivo ejecutable Delphi desde un lugar equivocado. En lugar de tratar de acceso donde se ha registrado en el exe, hay un intento de acceso al exe desde el escritorio, donde reside el script de S, y por supuesto el exe no está allí.

Esto sucede sólo para el usuario que no es administrador. Además, si un usuario administrador vez se ha quedado este script antes, funciona perfectamente bien para el que no es administrador.

Ahora trato de averiguar qué está sucediendo esto. Es por esto que trato de entender el flujo de CoCreateInstanceEx. No he encontrado ninguna información útil en la web. Entonces, ¿cómo tratar CoCreateInstanceEx para cargar tipos? Donde tampoco intenta mirar? ¿Tiene alguna idea de cómo la situación descrita puede suceder?

Cualquier información o idea será muy apreciada!

¿Fue útil?

Solución

Resulta que el exe del proceso Delphi se ha registrado en el ruta relativa en lugar de la ruta completa.

Todavía no estoy seguro de por qué para el usuario administrador funcionaba correctamente ... Así que si alguien tiene una idea Voy a estar interesado en escuchar.

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