Comment essayer COM CoCreateInstanceEx à des types de charge (pour l'utilisateur gagnant non-admin)?

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

  •  15-10-2019
  •  | 
  •  

Question

J'ai un problème très complexe qui se produit uniquement pour les utilisateurs de Windows non-admin.

Je lance un script S qui se trouve sur le bureau et appelle une fonction dans un C ++ dll. Ensuite, le flux se présente comme suit:

  1. Mon C ++ dll crée un processus Delphi, envoyer un GUID en tant que paramètre.
  2. Lors de l'initialisation, mon processus Delphi enregistre une classe C avec le GUID donné à l'aide d'une usine d'objets COM.
  3. Mon C ++ essaie dll d'appeler CoCreateInstanceEx avec le même GUID. ==> L'opération échoue avec HResult 0x80029C4A Erreur de type bibliothèque de chargement / DLL.

Aucune exception est levée à partir du côté Delphi - l'enregistrement semble fonctionner sans heurts.

I utilisé moniteur de processus et scie à ma grande surprise que lorsque CoCreateInstanceEx est appelé, il y a une tentative de lire mon dossier Delphi exe à partir d'un mauvais endroit. Au lieu d'essayer d'accéder où l'exe est enregistré, il y a une tentative d'accès à l'exe à partir du bureau, où le script S réside, et bien sûr l'exe est pas là.

Cela se produit uniquement à l'utilisateur non-admin. En outre, si un utilisateur admin jamais exécuter ce script avant, il fonctionne parfaitement bien pour le non-admin.

Je vais maintenant essayer de comprendre pourquoi cela se produit. Voilà pourquoi j'essaie de comprendre le flux de CoCreateInstanceEx. Je ne trouve pas d'informations utiles sur le web. Alors, comment CoCreateInstanceEx ne cherche à charger les types? Où est-il essayer de regarder? Avez-vous une idée de comment la situation décrite peut se produire?

sera très apprécié Toute information ou idée!

Était-ce utile?

La solution

Il s'avère que l'exe du processus Delphi a été enregistré avec un chemin relatif au lieu de chemin complet.

Je ne suis toujours pas sûr pourquoi pour l'utilisateur admin il a fonctionné correctement ... Donc, si quelqu'un a une idée que je vais être intéressé d'entendre.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top