Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Разработка под ASP.NET > System.Security.Permissions.FileIOPermission,xbap


Автор: C4Grey 29.12.2007, 22:43
Создал в VS2005 XAML BrowserApplication, в ней - загрузка 3ds файла при помощи dll
вот отрывок:
Код

   public partial class Page1 : System.Windows.Controls.Page
    {
        private const string STARTUP_FILE_NAME = "RSmith.3DS";
        private Reader3ds _mainReader3ds;
        private Model3DGroup _mainModel3DGroup;
        private Camera _mainCamera;
        private string _currentFileName;
        public Page1()
        {
            InitializeComponent();
        }
        private void WindowLoaded(object sender, EventArgs e)
        {
            LoadDefaulAnimation();
        }

        private void LoadDefaulAnimation()
        {
          LoadNew3dsFile(STARTUP_FILE_NAME);
        }

        private void LoadNew3dsFile(string fileName)
        {
            _mainReader3ds = new Reader3ds();
            _mainModel3DGroup = _mainReader3ds.ReadFile(fileName);          
            _currentFileName = fileName;
            if (_mainReader3ds.Cameras.Count > 0)
                _mainCamera = _mainReader3ds.Cameras[0];
            else
                _mainCamera = CreateFreeCamera();
            Viewport1.Camera = _mainCamera;
            ResetAnimation();
        }

RSmith.3DS - собственно, загружаемый файл, при компиляции все нормально запускается, файл загружается.
Запускаю просто xbap файл:
System.Security.SecurityException: Сбой при запросе разрешения типа "System.Security.Permissions.FileIOPermission, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089".

Ошибкой завершилось следующее действие:
Demand
Ошибкой завершилось первое разрешение следующего типа:
System.Security.Permissions.FileIOPermission
Ошибкой завершилось первым следующее разрешение:
<IPermission class="System.Security.Permissions.FileIOPermission, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"
version="1"
Read="C:\WINDOWS\system32\RSmith.3ds"/>
Почему файл помещается в папку WINDOWS я так и не понял но ладно...порыл хелпы, увидел где-то топик о правах...установил в свойствах проекта Security при помощи Enable ClickOnce Security Settings "This is a full trusted application" - все равно тот же Exception...
Да и если выставить права на full trusted то при загрузке с Интернета а не локально оно скажет что:
+ Пользователь отказался предоставить требуемые права приложению.
Вот так вот играюсь 4 дня....
Помогите пожалуйста...в то моск кипит...

Автор: Mymik 30.12.2007, 00:32
Попробуй преобразовывать релятивный путь в абсолютный путь... используй Server.MapPath() функцию. и "RSmith.3DS" замени на "~/RSmith.3DS"

Добавлено через 2 минуты и 29 секунд
Я ж правильно понял, что 
Код

_mainModel3DGroup = _mainReader3ds.ReadFile(fileName);
 
принимает путь к файлу ??? А ты передаешь имя файла... asp.net же ж запускается совсем в другом месте (не там где твой сайт)

Добавлено через 3 минуты и 45 секунд
Да, еще smile если ошибка не в этом. То было б замечательно указать в какой строчке происходит ошибка smile а то мы типа не яснослышащие smile мы только учимся ;)

Автор: C4Grey 30.12.2007, 18:00
Server.MapPath(); в XBAP не работает...как альтернатива - Uri...
Код

Uri uri = new Uri("pack://siteoforigin:,,,/RSmith.3ds", UriKind.Absolute);
UriTypeConverter utc = new UriTypeConverter();
s = utc.ConvertToString(uri);
_mainReader3ds = new Reader3ds();
 _mainModel3DGroup = new Model3DGroup();
 _mainModel3DGroup = _mainReader3ds.ReadFile(fileName);

но тогда:
 Данный формат пути не поддерживается.

Ошибка в строке:
 _mainModel3DGroup = _mainReader3ds.ReadFile(s);

P.S.Ошибка в этом.Яснослышанье удается)

Автор: Mymik 30.12.2007, 22:11
А если попробовать как пишут вот тут вот-->> http://www.wpf-graphics.com/help/html/M_Ab3d_Reader3ds_ReadFile_2.htm
Код

Uri fileUri = new Uri("pack://application:,,,/SampleApp;component/models/testModel.3ds", UriKind.Absolute));
using (Stream stream = Application.GetResourceStream(fileUri).Stream)
{
    Ab3d.Instance.ReadFile(stream, Viewport1);
}

Автор: Servena 3.1.2008, 12:47
Цитата

загрузка 3ds файла при помощи dll

О, люблю эту тему с разрешениями. 
У тебя у сборки нет разрешения на выполнение операции с файлами.
Поскольку у тебя Студия установлена, то в Пуск-Настройка-Панель управления-Администрирование должна быть программа Microsoft .NET Framework 2.0 Configuration. Она настраивает разрешения безопасности (не только она, но это более удобная с графическим интерфейсом).

Следующий шаг - это понять в какой Зоне (бывают Локальная, Интернет, Мой компьютер, Доверяемая и Ограниченная) работает твоя библиотека. У меня мною созданные библиотеки встраивались в HTML-страницу и в браузере внизу справа всегда было написано название зоны.

Дальше, самый простой вариант но небезопасный вариант в плане хакеров(если он пройдет, дальше можно будет тонко настроить):
Запусти  Microsoft .NET Framework 2.0 Configuration, разкрой плюсики до слова Machine (уровень компьютера), зайди в Code_Groups->All_Code: ты увидишь все зоны. Теперь нужно выбрать нужную, но так как я не знаю какая - посоветую для начала во всех этих зонах выставить FullTrust. 
Для этого -  нажимаешь на зоне прав. кн. миши - выбираешь свойства, переходишь на вкладку Permission Set и там в выпадающем списке выставляешь FullTrust, потом применить. 
После этого твое приложение на твоем компьютере должно работать.
Если получится, к безопасной настройке и настойке для работы с других компьютеров можно перейти в следующий раз.





Автор: C4Grey 5.1.2008, 01:11
Mymik, Servena, большое спасибо.
2Mymik - именно так все и работает, спасибо...действительно уж rtfm и будет щастье)

Автор: Rust_VB 30.1.2008, 09:31
Servena, спасибо за твое описание помогло, но только для моего ПК.
Но ты обещался написать как это сделать для других ПК.
У меня необходимость выложить программу в сети, неужели такие настройки надо делать на каждом ПК, если да то как это можно сделать скопом на все машины? Спасибо.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)