Problème de permissions à l'exécution

Résolu
baxtrf
Messages postés
4
Date d'inscription
samedi 10 janvier 2004
Statut
Membre
Dernière intervention
28 avril 2006
- 27 avril 2006 à 11:08
RV2931
Messages postés
185
Date d'inscription
samedi 21 mai 2005
Statut
Membre
Dernière intervention
16 juillet 2016
- 15 avril 2008 à 11:47
Bonjour à tous !

Je me trouve face à un problème que je n'arrive pas à résoudre :
J'ai développé un programme qui est amené à être exécuté au sein de mon entreprise depuis un dossier partagé. Chaque utilisateur accède à ce dossier (en tant que lecteur réseau) en lecture.
Lorsque j'exécute mon programme depuis le réseau, , j'ai l'exception suivante avant même l'exécution de mon code :

An unhandled exception of type 'System.Security.Policy.PolicyException' occurred in Unknown Module.




Additional information: Required permissions cannot be acquired.


Je précise qu'en local mon programme marche très bien.

Je pense qu'il y a quelque chose à faire au niveau de l'assembly mais je ne vois pas trop quoi ni comment.
Au mieux, j'aimerais faire en sorte que le programme s'exécute correctement.
Au pire j'aimerais pouvoir au moins récuperer cette exception (qui je le répete survient aavant toute execution de mon code).

Est ce que quelqu'un a une solution à mon problème ?

Merci

9 réponses

MorpionMx
Messages postés
3466
Date d'inscription
lundi 16 octobre 2000
Statut
Membre
Dernière intervention
30 octobre 2008
56
27 avril 2006 à 19:06
Dans Visual Studio (2005) -> Preferences de ton projet -> Onglet signature.
Tu coches la checkbox "Signer l'assembly", et tu te crées un nouveau jeu de clé. Un fichier snk est généré, tu le gardes bien precieusement, il te permettra de signer d'autres assemblys.

Cette manip donne un nom fort (strong name) a ton assembly. (info : Il faut aussi que ton assembly ait un numéro de version pour avoir un nom fort).

Ensuite, pour donner aux assemblys signés avec ta clé le droit d'execution Fulltrust, il suffit d'aller dans le panneau de configuration du .net framework -> Stratégie de sécurité du runtime -> Ordinateur -> groupes de codes.

Tu crées un nouveau code (clic droit -> nouveau).
Tu lui donnes un nom, une description, tu fais suivant, et dans le nouvel ecran, tu deroules la liste deroulante et tu choisis "Nom fort". Tu cliques sur "importer" et tu choisis ton assembly. Il importera automatiquement la clé publique. Tu fais suivant, et a cet ecran, dans la liste deroulante, tu choisis "Full Trust".

Normalement, ca devrait marcher.

Si tu veux mettre en full trust tous les assemblys de ton intranet local, dans "Groupes de codes" tu choisis "LocalIntranet_Zone" et tu le passes en Full Trust

Mx
MVP C# 
3
bernie666
Messages postés
427
Date d'inscription
mercredi 1 octobre 2003
Statut
Membre
Dernière intervention
29 janvier 2008
1
27 avril 2006 à 11:50
Je pense qu'il faut revoir les permissions NTFS notamment au niveau de la sécurité Ntfs et non des droits de partage :  voir si "lecture et execution" est authorisé pour les personnes qui accedent au dossier

++
0
baxtrf
Messages postés
4
Date d'inscription
samedi 10 janvier 2004
Statut
Membre
Dernière intervention
28 avril 2006

27 avril 2006 à 12:19
Tout d'abord merci pour ta réponse !

Malheureusement le problème n'est pas si simple que ça :(
En effet les utilisateurs et moi avont les droits "lecture et execution" sur ces repertoires. D'ailleurs, un programme non-managé s'execute sans aucun probleme.

D'apres ce que j'ai pu comprendre, il faudrait enregistrer mon application dans le GAC des machines des utilisateurs pour que ca fonctionne. Cette solution est _beaucoup_ trop lourde pour moi. A confirmer!

Une autre solution consisterait à executer le programme en local (donc après copie). Mais c'est franchement pas propre ...
0
gyzmo222
Messages postés
66
Date d'inscription
lundi 27 juin 2005
Statut
Membre
Dernière intervention
2 juin 2006
1
27 avril 2006 à 18:10
Je pencherais aussi pour des permissions non attribuées à l'utilisateur distant mais si tu pense pouvoir appeler ton programme à distance, pense aux services web. Un service sur la machine distante permettra d'executer ton prog en local en envoyant les infos sur l'autre pc...
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
MorpionMx
Messages postés
3466
Date d'inscription
lundi 16 octobre 2000
Statut
Membre
Dernière intervention
30 octobre 2008
56
27 avril 2006 à 18:16
Salut,

Et en mettant les droits de tes assemblys lancés depuis ton intranet local en fulltrust ca donne quoi ?
Il y a eu un sujet sur ca hier qui se trouve quelques lignes en dessous, dans le forum

Sinon, quels sont les actions de ton assembly qui pourraient le faire agir comme ca ? (acces a une bdd, acces a des fichiers/dossiers, ...) ?
Mx
MVP C# 
0
MorpionMx
Messages postés
3466
Date d'inscription
lundi 16 octobre 2000
Statut
Membre
Dernière intervention
30 octobre 2008
56
27 avril 2006 à 18:22
Ou encore, tu signes ton assembly et tu donnes les droits en fulltrust a tous les assemblys qui ont cette signature.
C'est plus sécurisé ainsi que de mettre le local intranet en fulltrust.

Mx
MVP C# 
0
baxtrf
Messages postés
4
Date d'inscription
samedi 10 janvier 2004
Statut
Membre
Dernière intervention
28 avril 2006

27 avril 2006 à 18:42
Cette dernière solution pourrait m'interresser.
Est ce que tu pourrais m'expliquer un peu plus précisément comment faire ?

Merci beaucoup !
0
baxtrf
Messages postés
4
Date d'inscription
samedi 10 janvier 2004
Statut
Membre
Dernière intervention
28 avril 2006

28 avril 2006 à 09:06
Merci pour ta réponse, j'ai testé chez moi et c'est en effet la méthode à adopter.

Merci encore :)
0
RV2931
Messages postés
185
Date d'inscription
samedi 21 mai 2005
Statut
Membre
Dernière intervention
16 juillet 2016

15 avril 2008 à 11:47
Bonjour,

j'ai le même genre de problème sous VS2003, execution locale nickelle, en réseau, system.Exception.Permissions.patati.patata, j'ai essayé en mettant "uiliser mscorlib : false" ou plutôt "Ne pas utiliser mscorlib:True", la logique windows par excellence :o)

J'ai une erreur bidon du genre System.Byte n'est pas défini ou importé, alors que j'en utilise pas, mais bon, comme j'ai l'impression que mscorlib, c'est un peu ça qui fait tout... je pense pas qu'on puisse faire sans, d'où la question, est-ce bien utile de demander de ne pas utiliser quelque chose que l'on ne peut pas ne pas utiliser ??? (Ahhh bill, quel phylosophe...) :o)

Si quelqu'un pouvait me donner la marche à suivre pour résoudre ce problème sous VS2003, j'ai pas trouvé

Merci

RV

PS: Je viens de me mettre au C#, et je trouvais que c'était une merveille, ce qui en lui-même est vrai, mais alors le système de code managé patin couffin, si ça crée ce genre de problème et de procédure de résolution lorsque tu veux déployer un simple tout petit ".exe" en partage réseau, c'est vraiment mal pensé... mon avis d'amateur biensûr, déjà il y a le problème de la version de .NET...

L'intelligence est la chose la mieux répartie chez l'homme, car quoi qu'il en soit pourvu, il a toujours l'impression d'en avoir assez. "Descartes"
0