Question

Une solution de contournement pour appeler regasm sans les droits d'administrateur a déjà été décrite ici :

COM Interop sans reproche

J'essaie de créer une bibliothèque COM que mes utilisateurs peuvent déployer et utiliser à partir d'Excel VBA sans les privilèges d'administrateur.J'ai aimé la solution de contournement du regasm, car il semble que les gens ne réussissent pas beaucoup à utiliser des objets COM sans inscription à partir d'Excel VBA.Je souhaite également une liaison anticipée afin que mes utilisateurs puissent bénéficier de la complétion de la syntaxe.

Cependant, la réponse acceptée à la question mentionnée ci-dessus ne décrit pas où placer la DLL d'assemblage sur l'ordinateur de l'utilisateur.Des droits d'administrateur sont requis pour installer l'assembly dans le GAC, je me demande donc où placer le fichier dll.Je suppose que le répertoire de l'application est recherché pour les DLL référencées, mais je ne peux pas placer ma DLL dans le répertoire d'Excel sans à nouveau les droits d'administrateur.Est-il possible d'utiliser la solution de contournement avec le client Excel ?Existe-t-il un autre moyen d'appeler des objets COM à partir de VBA sans avoir besoin des privilèges d'administrateur pour les déployer au préalable ?

Était-ce utile?

La solution

Appel de regasm sans droits d'administrateur pour COM Interop

Je pense qu'il devrait être possible d'utiliser RegistrationServices.RegisterAssembly et RegOverridePredefKey API ensemble pour mettre en œuvre l'enregistrement automatique sous le HKCU hive, d'une manière conviviale pour l'UAC.J'ai posté une réponse plus détaillée ici.

Autres conseils

Ouais, maintenant tu as deux problèmes, tu ne peux pas le mettre n'importe où devrait mettez-le, comme le GAC ou un sous-répertoire c:\program files.Étant donné que ces emplacements nécessitent également une élévation UAC.Vous avez probablement également oublié d'exécuter Regasm.exe avec l'option /codebase, nécessaire pour indiquer au CLR où rechercher le fichier.

L'utilisateur doit disposer de suffisamment de privilèges pour copier la DLL dans un répertoire auquel il a accès en écriture.Il s'agit normalement uniquement d'un répertoire dans c:\users\username, comme le sous-répertoire appdata.Le casse-tête que vous devrez résoudre est que le fichier .reg doit être adapté à chaque utilisateur individuel puisque son nom d'utilisateur est différent.Alors le CodeBase la valeur dans le fichier .reg doit être modifiée pour chaque utilisateur.Cela évolue mal, c’est un euphémisme.

La réponse que vous avez trouvée n’est tout simplement pas très bonne.La seule solution qui vraiment fonctionne est d'écrire votre propre fonction d'enregistrement.Celui qui écrit les clés de registre dans HKCU au lieu de HKLM.Utilisez le Attribut [ComRegisterFunction].Vous savez grâce au fichier .reg quelles clés vous devez écrire.Et vous utilisez Assembly.GetExecutingAssembly().Location pour déterminer quoi écrire pour la valeur de registre CodeBase.N'oubliez pas la [ComUnregisterFunction].

Gardez à l’esprit que, au moins en esprit, vous essayez de contourner les restrictions imposées par l’administrateur du réseau local à ces utilisateurs.Ils se soucient beaucoup de savoir quel type de code s'exécute sur les machines qu'ils prennent en charge.Cela pourrait bien vous causer des ennuis, parlez au moins au gars.

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