31 votes

Pourquoi mon application .NET se bloque-t-elle lorsqu'elle est exécutée à partir d'un lecteur réseau?

Mon application .NET échoue lorsqu'elle est exécutée à partir d'un lecteur réseau, même lorsque le même exécutable fonctionne parfaitement bien à partir d'un disque dur local?

J'ai essayé de vérifier la "confiance totale" comme ceci:

 try
{
    // Demand full trust permissions
    PermissionSet fullTrust = new PermissionSet( PermissionState.Unrestricted );
    fullTrust.Demand();

    // Perform normal application logic

}
catch( SecurityException )
{
    // Report that permissions were not full trust
    MessageBox.Show( "This application requires full-trust security permissions to execute." );
}
 

Cependant, cela n'aide pas, ce qui signifie que l'application démarre et que le bloc catch n'est jamais entré. Cependant, une version de débogage montre que l'exception levée est une SecurityException provoquée par une InheritanceDemand. Des idées?

22voto

Davy Landman Points 9010

En effet, il en a à faire avec le fait que les apps sur un emplacement réseau sont moins digne de confiance, puis sur votre disque dur local (en raison de la politique par défaut de la .NET framework).

Si je ne me trompe pas, Microsoft a finalement corrigé cette nuisance .NET 3.5 SP1 (après beaucoup de développeurs se plaindre).

Je google avait-il: .NET Framework 3.5 SP1 Permet de code managé pour être lancé à partir d'un partage réseau!

14voto

Gulzar Nazim Points 35342

11voto

Ben Hoffstein Points 44398

Vous l'avez peut-être déjà fait, mais vous pouvez utiliser CasPol.exe pour activer FullTrust pour un partage réseau spécifié.

Par exemple

 cd c:\WINDOWS\Microsoft.NET\Framework\v2.0.50727
CasPol.exe -m -ag 1.2 -url file:///N:/your/network/path/* FullTrust
 

Plus d'infos ici .

3voto

TheSoftwareJedi Points 15921

S'il s'agit de .NET 2.0 ou supérieur, ClickOnce a été créé pour vraiment aider à ce déploiement. Je déploie uniquement sur des partages réseau en utilisant cela.

0voto

Mats Fredriksson Points 7136

C'est la sécurité intégrées par microsoft dans le .net framework. C'est une façon d'arrêter les logiciels malveillants d'exécuter localement, avec plein de privilèges, de sorte que vous ne pouvez pas modifier par programmation dans le code.

Ce que vous devez faire est d'accroître la confiance des assemblées spécifiques. Vous faites cela dans la .NET Framework Configuration (Panneau de configuration->Outils d'Administration), et doit être fait sur chaque ordinateur.

Comme avec toutes les mesures de sécurité, c'est une douleur dans le cul, mais aidera le monde à être moins infecté etc...

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