0 votes

Échec d'appel de fonction DLL C++ en mode mixte lorsque l'application est lancée à partir d'un partage réseau. Appelé depuis une application C non gérée

La DLL en mode mixte appelée depuis une application C native ne se charge pas : Une exception non gérée de type 'System.IO.FileLoadException' s'est produite dans un module inconnu.

Informations supplémentaires : Impossible de charger le fichier ou l'assemblage 'XXSharePoint, Version=0.0.0.0, Culture=neutre, PublicKeyToken=e0fbc95fd73fff47' ou l'une de ses dépendances. Impossible d'accorder les demandes de permission minimales. (Exception de HRESULT : 0x80131417)

Mon environnement est : Une application C native appelant une DLL C++ en mode mixte, qui charge ensuite une DLL C# . Cela fonctionne correctement lorsqu'il est chargé à partir d'un lecteur local, mais lorsqu'il est lancé à partir d'un lecteur réseau, il échoue avec les messages ci-dessus.

L'appel à LoadLibrary réussit, tout comme le GetProcAddress. L'erreur de chargement se produit lorsque j'appelle la fonction.

J'ai signé numériquement l'application C, et j'ai effectué une signature "strong name" sur les 2 DLLs. Le PublickKeyToken dans le message ci-dessus correspond bien à la DLL nommée. J'ai également lancé les commandes CASPOL sur mon client pour accorder une confiance totale à ce keytoken de nom fort. Lorsque cela n'a pas fonctionné, j'ai essayé la commande CASPOL pour accorder FullTrust à l'URL du lecteur réseau (y compris le chemin d'accès au répertoire de mon application) ; aucun changement dans les résultats.

J'ai essayé de supprimer toutes les dépendances, pour qu'il n'y ait que la DLL initiale en mode mixte... J'ai remplacé le corps de toutes les fonctions par un simple retour d'une valeur entière de "succès". Résultats inchangés. Ce n'est que lorsque j'ai changé le mode mixte en mode Win32, et que j'ai changé les propriétés de configuration >> Général >> Support du langage d'exécution commun de "Support du langage d'exécution commun" à "Pas de support du langage d'exécution commun" que l'appel de la DLL a produit le résultat attendu (juste le retour de la valeur entière "success").

1voto

Thomas Maierhofer Points 1498

Vous n'avez pas la permission d'exécuter du code sur ce partage. Je pense que vous ne pouvez pas exécuter une application .NET à partir de ce partage. Essayez, placez un exécutable .NET sur le partage, et essayez de l'exécuter. Si cela ne fonctionne pas, vous devez ajouter une permission dans votre configuration .NET pour utiliser le partage.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X