Частичное доверие в WPF 4

Я начал новый проект в WPF 4 (.NET 4) и пытаюсь выяснить, могу ли я запустить его в режиме xbap. Мне нужно запустить приложение в режиме полного доверия с новым режимом, доступным в.NET 4, который спрашивает конечного пользователя, должно ли выполняться приложение полного доверия.

Я установил режим "Безопасность" на "Полное доверие", и он прекрасно работает. Когда я запускаю его, выдается исключение, и в сообщении об ошибке IE отображается следующая ошибка.

Есть ли способы обойти это?

URI запуска: T:\projects\Hightech Sources\PayRoll\PayRoll. Web\publish\PayRoll. Web.xbap Удостоверение приложения: file:///T:/projects/Hightech%20Sources/PayRoll/PayRoll. Web/publish/PayRoll. Web.xbap#PayRoll. Web.xbap, версия =1.0.0.0, культура = нейтральная, PublicKeyToken=1d910f49755d2c97, processorArchitecture=msil/PayRoll. Web.exe, версия =1.0.0.0, культура = нейтральная, PublicKeyToken = 1d910f49755d2cureure, процессор =msil, type=win32

System.Security.SecurityException: запрос на разрешение типа 'System.Security.Permissions.FileIOPermission, mscorlib, Version=4.0.0.0, Culture= нейтральный, PublicKeyToken=b77a5c561934e089' не выполнен. в System.Security.CodeAccessSecurityEngine.Check (Требование объекта, StackCrawlMark & ​​stackMark, Boolean isPermSet) в System.Security.CodeAccessSecurityEngine.Check (код CodeAccessPermission, StackCrawlMark & ​​stackMark.D.Security.AccessPlayer.Security.Security. atception) InternalLoadAssemblyName (AssemblyName assemblyRef, фактические данные assemblySecurity, StackCrawlMark & ​​stackMark, булева forIntrospection, булевы suppressSecurityChecks) при System.Reflection.RuntimeAssembly.InternalLoadFrom (String assemblyFile, Evidence securityEvidence, Byte [], значение хэш AssemblyHashAlgorithm HashAlgorithm, булевой forIntrospection, булевы suppressSecurityChecks, StackCrawlMark & ​​stackMark) в System.Reflection.Assembly.LoadFrom (String assemblyFile) в PayRoll. Web.App.SelectAssemblies () в Caliburn.PresentationFramework.ApplicationModel.CaliburnApplication..ctor () в PayRoll. Web.App..ctor () в PayRoll. Web. App.Main () в System.AppDomain._nExecuteAssembly (сборка RuntimeAssembly, S tring [] args) в System.AppDomain.nExecuteAssembly (сборка RuntimeAssembly, String [] args) в System.Runtime.Hosting.ManifestRunner.Run (логический checkAptModel) в System.Runtime.Hosting.ManifestRunner.ExunteAsAsuntime () Хостинг ActivationContext ActivationContext) в System.AppDomain.Setup (объектный аргумент) в System.AppDomain.nCreateInstance (String friendlyName, настройка AppDomainSetup, Evidence предоставил SecurityInfo, Evidence creatorsSecurityInfo, IntPtr parentSecurityDescriptor. System.Runtime.Hosting.ApplicationActivator.CreateInstance (ActivationCo ntext ActivationContext, String [] activCustomData) в System. Windows.Interop.PresentationApplicationActivator.CreateInstance (ActivationContext actCtx) в System.Activator.CreateInstance (ActivationContext ActivationContext) в System.Deployment.Application.DepecuTanager..InPlaceHostingManager.Execute () в MS.Internal.AppModel.XappLauncherApp.ExecuteDownloadedApplication () в System. Windows.Interop.DocObjHost.RunApplication (бегунок ApplicationRunner) в MS.Internal.AppModel.XappXApp узел приложения System. Windows.Application.OnExit (ExitEventArgs e) в System. Windows.Application.DoShutdown () в System. Windows.Application.ShutdownImpl () в System. Windows.Application.ShutdownCallback(Object arg) в System. Windows.Threading.ExceptionWrapper.InternalRealCall(обратный вызов делегата, аргументы объекта, Int32 numArgs) в MS.Internal.Threading.ExceptionFilterHelper.TryCatchWhen(источник объекта, делегат m ethod, объектные аргументы, Int32 (numArgs, делегат catchHandler) в System.Windows.Threading.DispatcherOperation.InvokeImpl() в System.Windows.Threading.DispatcherOperation.InvokeInSecurityContext(состояние объекта) в System.Threading.ExecutionContext.runTataCat () System.Runtime.CompilerServices.RuntimeHelpers.ExecuteCodeWithGuaranteedCleanup(код TryCode, CleanoutCode backoutCode, Object userData) в System.Threading.ExecutionContext.RunInternal (calltionback executeContxt обратный вызов, состояние объекта, логическое значение ignoreSyncCtx) в System.Threading.ExecutionContext.Run (ExecutionContext executeContext, обратный вызов ContextCallback, состояние объекта) в System.Windows.Threading.DispatcherOperation.Invoke() в System.Windows.Threading.Dispatcher.ProcessQueue(в System.Windows.Threading.Dispatcher.WndProcHook(IntPtr hwnd, Int32 msg, IntPtr wParam, IntPtr lParam, Boolean& handled) в MS.Win32.HwndWrapper.WndProc(IntPtr hwnd, Int32 msg, IntPtr wParam, IntPtr lParam, Boolean& handled) в MS.Win32.HwndSubclass.DispatcherCallbackOperation(Object o)Wer. WeWWExW. WeWWExW. WeWWExW. WeWWExW. WeWWExW. WeWW). InternalRealCall (обратный вызов делегата, объектные аргументы, Int32 numArgs) в MS.Internal.Threading.ExceptionFilterHelper.TryCatchWhen(исходный объект, метод делегата, объектные аргументы, Int32 numArgs, Delegate catchHandler) в System.Windows.Threading.Dispatcher.InvokeImplity приоритет Dispatcher, Тайм-аут Тайм-аута, Метод делегата, Аргументы объекта, Int32 numArgs) в MS.Win32.HwndSubclass.SubclassWndProc(IntPtr hwnd, Int32 msg, IntPtr wParam, IntPtr lParam) в MS. Win32.UnsafeNativeMetMessSg.Threading.Dispatcher.PushFrameImpl (кадр DispatcherFrame) в System. Windows.Threading.Dispatcher.PushFrame (кадр DispatcherFrame) в System. Windows.Threading.Dispatcher.Run () в System. Windows.Application.RunDispatcher (игнорирование объектов) в системе.. Wi ndows.Application.StartDispatcherInBrowser (объект не используется) в System. Windows.Threading.ExceptionWrapper.InternalRealCall (обратный вызов делегата, аргументы объекта, Int32 numArgs) в MS.Internal.Threading.ExceptionFilterHelper.TryCatchWhen(объектный объект, метод делегата, метод Object, numArgs, Делегат catchHandler) в System.Windows.Threading.DispatcherOperation.InvokeImpl() в System.Windows.Threading.DispatcherOperation.InvokeInSecurityContext(состояние объекта) в System.Threading.ExecutionContext.runTryCode (объект userData).ServiceSiler. в System.Run. RuntimeHelpers.ExecuteCodeWithGuaranteedCleanup(код TryCode, CleanoutCode backoutCode, Object userData) в System.Threading.ExecutionContext.RunInternal (ExecutionContext executeContext, обратный вызов ContextCallback, состояние объекта) в состоянии объекта. ignoreSyncCtx) в System.Threading.ExecutionContext.Run (ExecutionContext executeContext, Обратный вызов ContextCallback, состояние объекта) в System.Windows.Threading.DispatcherOperation.Invoke() в System.Windows.Threading.Dispatcher.ProcessQueue() в System. Windows.Threading.Dispatcher. WndProcHook (IntPtr hwnd, Int32 msg, IntPtr wParam, IntPtr lParam, Boolean & handled) в MS.Win32.HwndWrapper.WndProc(IntPtr hwnd, Int32 msg, IntPtr wParam, IntPtr lParam, Boolean& handled) в MS. Win32.HwndSubclass.DispatcherCallbackWread. WreadWread. WractionWread. WractionWread. WractionWreadingWread. WractionWreadingWread. WractionWreadingWread. WractionWreadingWread. WrabackWreadingWread. WractionOppering.InternalRealCall (обратный вызов делегата, объектные аргументы, Int32 numArgs) в MS.Internal.Threading.ExceptionFilterHelper.TryCatchWhen(исходный объект, метод делегата, объектные аргументы, Int32 numArgs, делегат catchHandler) в System.Windows.Threading.Dispatcher.InvokeImplity (приоритет, тайм-аут TimeSpan, метод делегата, аргументы объекта, Int32 numArgs) в MS.Win32.HwndSubclass.SubclassWndProc(IntPtr hwnd, Int32 msg, IntPtr wParam, IntPtr lParam) Действие, которое не удалось выполнить: Требование Тип первого разрешения th при сбое было:
System.Security.Permissions.FileIOPermission

1 ответ

Решение

Единственный способ запустить самоподписанное приложение xbap с полным доверием - это добавить сертификат на компьютер клиента (что может быть невозможно в большинстве случаев) или добавить URL-адрес сайта в список доверенных сайтов. Я нашел последнее наиболее удобным, и приложение запускается так, как будто оно подписано действительным сертификатом, выданным доверенным органом.

Обратите внимание, что это возможно только в.NET 4.0 и не будет работать в предыдущих версиях WPF/.NET

Другие вопросы по тегам