2012-09-26 43 views
0

Je travaille sur la création d'une installation clickonce pour mon application.WPF ClickOnce problème de confiance totale (lié à AppDomain distinct?)

J'ai les paramètres de sécurité ClickOnce activés avec une confiance totale dans l'onglet Sécurité si les propriétés du projet. Je publie sur un lecteur réseau et exécute l'installation. L'installation est réussie, mais quand je lance l'application que j'obtenir cette erreur:

enter image description here

J'ai le code Pos for .Net en cours d'exécution dans un AppDomain distinct (en raison de ses problèmes avec la politique de sécurité par défaut de .net 4). Il fonctionne bien sur mon système local sans clickonce. Mon application utilise Prism, j'ai donc dû modifier le manifeste pour inclure les modules chargés dynamiquement. C'est en quelque sorte lié à mon AppDomain que je crée ne pas avoir une confiance totale.

Voici comment je crée le AppDomain

AppDomainSetup currentAppDomainSetup = AppDomain.CurrentDomain.SetupInformation; 
AppDomainSetup newAppDomainSetup = new AppDomainSetup() 
{ 
    ApplicationBase = currentAppDomainSetup.ApplicationBase, 
    LoaderOptimization = currentAppDomainSetup.LoaderOptimization, 
    ConfigurationFile = currentAppDomainSetup.ConfigurationFile, 
    PrivateBinPath = @"Modules" // need to set this so that the new AppDomain can see the prism modules 
}; 
newAppDomainSetup.SetCompatibilitySwitches(new[] { "NetFx40_LegacySecurityPolicy" }); // required for POS for .Net to function properly 
_posAppDomain = AppDomain.CreateDomain("POS Hardware AppDomain", null, newAppDomainSetup); 
// Error happens on the following line. Note that type T is always in same assembly that AppDomain was created in. 
    T hardware = (T)PosAppDomain.CreateInstanceFromAndUnwrap(Assembly.GetAssembly(typeof(T)).Location, typeof(T).FullName); 

est-il un paramètre de sécurité que je suis absent?

Je pense que je me rapproche. L'AppDomain que je crée tourne en toute confiance quand je cours sans clickonce, mais quand je le lance avec clickonce il ne fonctionne pas en confiance totale ... alors maintenant j'essaie de comprendre comment l'obtenir en toute confiance.

Répondre

1

figured it out

je devais ajouter le Evidence et PermissionSet ...

Evidence evidence = new Evidence(); 
evidence.AddHostEvidence(new Zone(SecurityZone.MyComputer)); 
PermissionSet ps = SecurityManager.GetStandardSandbox(evidence); 
AppDomainSetup currentAppDomainSetup = AppDomain.CurrentDomain.SetupInformation; 
AppDomainSetup newAppDomainSetup = new AppDomainSetup() 
{ 
    ApplicationBase = currentAppDomainSetup.ApplicationBase, 
    LoaderOptimization = currentAppDomainSetup.LoaderOptimization, 
    ConfigurationFile = currentAppDomainSetup.ConfigurationFile, 
    PrivateBinPath = @"Modules" // need to set this so that the new AppDomain can see the prism modules 
}; 
newAppDomainSetup.SetCompatibilitySwitches(new[] { "NetFx40_LegacySecurityPolicy" }); // required for POS for .Net to function properly 
Questions connexes