Проблема полного доверия WPF ClickOnce (связана с отдельным доменом приложений?)

Я работаю над созданием установки для моего приложения.

У меня включены параметры безопасности ClickOnce с полным доверием на вкладке «Безопасность», если в свойствах проекта. Публикую на сетевой диск и запускаю установку. Установка прошла успешно, но когда я запускаю приложение, я получаю такую ​​ошибку:

введите описание изображения здесь

У меня есть код Pos для .Net в отдельный домен приложений (из-за проблем с политикой безопасности по умолчанию .net 4). Он отлично работает в моей локальной системе без единого щелчка. В моем приложении используется Prism, поэтому мне пришлось изменить манифест, чтобы включить динамически загружаемые модули. Это как-то связано с моим AppDomain, который я создаю, не имея полного доверия.

Вот как я создаю 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);

Есть ли какой-то параметр безопасности, который мне не хватает?

Я думаю, что подхожу ближе. Создаваемый мной AppDomain работает с полным доверием, когда я запускаю без clickonce, но когда я запускаю его с clickonce, он не запускается с полным доверием ... так что теперь я пытаюсь выяснить, как получить его с полным доверием.


person Chris Klepeis    schedule 26.09.2012    source источник


Ответы (1)


Догадаться

Пришлось добавить Evidence и 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
person Chris Klepeis    schedule 27.09.2012