none
Как правильно включать файл БД .mdb в проект установщика проекта ASP.NET, подскажите, пожалуйста? RRS feed

  • Вопрос

  • Добрый день.

    Вот есть у меня файл основной  БД с расширением .mdb, который я как полагается вложил в папку App_Data внутри ASP.NET проекта в главной папке, где все aspx страницы.

    Но как дать разрешение на запись в этот каталог на компьютере конечного пользователя еще при инсталляции?

    Как сделать так, чтобы приложение после установки сразу заработало, а не требовало администрирования со стороны конечного клиента (как то задание разрешений на эту папку, на сам файл или что-то еще)?

    Может быть, такое возможно при использовании InstallShield, а не встроенного в VisualStudio2010 установщика?

    Компетентные товарищи, пожалуйста, отзовитесь!

    Заранее спасибо.

     

    21 марта 2011 г. 19:17

Ответы

  • Исходя из обсуждения Adding write permission to app_data from VS side, вам нужно программно разрешить права на запись для папки App_Data, но только для этого установка должна идти от администратора (чтобы можно было поменять права папки). Пример, как установить права для папки (из комментариев к Setting NTFS Permissions with C#):

    using System.Security.AccessControl;
    
    DirectoryInfo di = new DirectoryInfo(path);
    
            DirectorySecurity dSecurity = di.GetAccessControl();
    
            FileSystemAccessRule rule = new FileSystemAccessRule("users", FileSystemRights.Modify , InheritanceFlags.None | InheritanceFlags.ContainerInherit | InheritanceFlags.ObjectInherit, PropagationFlags.None, ControlType);
    
            dSecurity.SetAccessRule(rule);
    
            di.SetAccessControl(dSecurity);
    

     


    Для связи [mail]
    23 марта 2011 г. 11:36
    Модератор
    • Помечено в качестве ответа Ivan Abramov 8 апреля 2011 г. 7:54
    25 марта 2011 г. 9:33
    Модератор
  • Вкладку безопасность можно увидеть, если в свойвах папки выключить опцию "Использовать простой общий доступ к файлам". Попробуйте поэкспериментировать.


    Для связи [mail]
    • Помечено в качестве ответа Ivan Abramov 8 апреля 2011 г. 7:54
    5 апреля 2011 г. 5:08
    Модератор
  • Выяснил, что нужно дать разрешения на запись для файла БД (а не для папки App_Data) для группы "ПОЛЬЗОВАТЕЛИ", и все начинает работать.

    Интересно, что лучше, мой вариант или вариант добавления пользователя ASPNET с установкой прав на запись для него?

    5 апреля 2011 г. 11:04

Все ответы

  • Исходя из обсуждения Adding write permission to app_data from VS side, вам нужно программно разрешить права на запись для папки App_Data, но только для этого установка должна идти от администратора (чтобы можно было поменять права папки). Пример, как установить права для папки (из комментариев к Setting NTFS Permissions with C#):

    using System.Security.AccessControl;
    
    DirectoryInfo di = new DirectoryInfo(path);
    
            DirectorySecurity dSecurity = di.GetAccessControl();
    
            FileSystemAccessRule rule = new FileSystemAccessRule("users", FileSystemRights.Modify , InheritanceFlags.None | InheritanceFlags.ContainerInherit | InheritanceFlags.ObjectInherit, PropagationFlags.None, ControlType);
    
            dSecurity.SetAccessRule(rule);
    
            di.SetAccessControl(dSecurity);
    

     


    Для связи [mail]
    23 марта 2011 г. 11:36
    Модератор
  • Спасибо. А куда вставлять подобный код? Как я могу я в проекте установщика (стандартный тип проекта в VS2010) добавить модуль или класс, в который вставлять данный код? Объясните пошагово, плз.
    24 марта 2011 г. 20:05
    • Помечено в качестве ответа Ivan Abramov 8 апреля 2011 г. 7:54
    25 марта 2011 г. 9:33
    Модератор
  • Спасибо, Дмитрий.

    С настраиваемым действием все понятно (хотя довольно очень сложно).

    Приведенный вами код на C# не получается сделать рабочим, бьюсь уже пару дней.

    Как программно дать разрешения на запись на конкретную папку "C:\Inetpub\wwwroot\SS\App_Data\"  для конкретного пользователя "ASPNET" (рассматриваем сейчас WindowsXP)?

    Не могли бы вы написать на VB.NET?

    Заранее спасибо.

    Вот у меня получился такой код:

    Dim di As New System.IO.DirectoryInfo("C:\Inetpub\wwwroot\SimpleSite\App_Data")

    Dim dSecurity As DirectorySecurity

    = di.GetAccessControl()

    Dim rule As New FileSystemAccessRule("users", FileSystemRights.Write, InheritanceFlags.None Or InheritanceFlags.ContainerInherit Or InheritanceFlags.ObjectInherit, PropagationFlags.None, AccessControlType.

    Allow)

    dSecurity.SetAccessRule(rule)

    di.SetAccessControl(dSecurity)

    Но возникает ошибка в четвертой строке в SetAccessRule:

    Some or all identity references could not be translated.

     

    29 марта 2011 г. 19:17
  • Попробуйте давать права своему APSNET пользователю. Такая ошибка может возникать если пользователь не найдет. С users может быть проблема, т.к. в русской локализации эта группа переведена и называется Пользователи. Также если не выйдет, то попробуйте указать более полное имя пользователя, т.е. ИмяКомпьютера\Пользователь или ИмяДомена\Пользователь (если компьютер находится в домене).

    Также один из вариантов возникновения ошибки - это то, что учетная запись владельца папки больше не существует и тогда нужно изменять владльца папки в свойствах папки (Owners that don't exist any more)


    Для связи [mail]
    30 марта 2011 г. 8:55
    Модератор
  • Пользователю ASPNET права на запись даю, но нужно еще кому-то что-то дать.

    Попробовал дать все разрешения абсолютно всем пользователям - только после этого заработало.

    Может быть пользователь IUSR_<computer_name> нужно тоже разрешать?

    2. А можно ли как-то увидеть вклаюку "Безопасность" из под-локальной учетной записи (с правами админа), но не "Администратор"?

    А то неудобно каждый раз в безопасный режим под Администратором заходить.

    Как запусть консоль из под учетки Админа?

    Заранее спасибо.

    4 апреля 2011 г. 16:04
  • Вкладку безопасность можно увидеть, если в свойвах папки выключить опцию "Использовать простой общий доступ к файлам". Попробуйте поэкспериментировать.


    Для связи [mail]
    • Помечено в качестве ответа Ivan Abramov 8 апреля 2011 г. 7:54
    5 апреля 2011 г. 5:08
    Модератор
  • Выяснил, что разрешения на запись нужно давать НЕ на папку "App_Data", а на сам файл БД .mdb

    Иначе, там что-то наследуется и в результате у кого-то нет прав на запись.

    А вот для кого именно нужно разрешать (для пользователя ASPNET, "Гостевая учетная запись IIS - IUSR_computer" или для владельца папки) - это еще выясняю...

    5 апреля 2011 г. 6:34
  • Выяснил, что нужно дать разрешения на запись для файла БД (а не для папки App_Data) для группы "ПОЛЬЗОВАТЕЛИ", и все начинает работать.

    Интересно, что лучше, мой вариант или вариант добавления пользователя ASPNET с установкой прав на запись для него?

    5 апреля 2011 г. 11:04
  • Это уже как вам хочется, давать права всем или только определенному пользователю. Вариант ASPNET пользователем, предполагает действия администратора по добавлению самого пользователя. Думаю вопрос решен.


    Для связи [mail]
    7 апреля 2011 г. 8:42
    Модератор
  • Да, вопрос решен. Большое спасибо, Дмитрий и успехов вам в делах!

    Последний вопрос, если можно, опять по правам.

    Я использую в коде автоматизацю с Word-ом через ComInterop, на строке

    CreateObject("Word.Application")

    возникает такая ошибка

    http://91.192.189.167/ErrorScreen.gif

    Наверное, дело опять в правах. Не поможете?

    MSOffice на компьютере с веб-сервером установлен.

    Заранее спасибо.

     

     

     

    8 апреля 2011 г. 7:53