Модераторы: feodorv, GremlinProg, xvr, Fixin
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Изменение разрешений на папку Win7, Обновление DLL 
:(
    Опции темы
Etud
Дата 2.8.2011, 20:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 35
Регистрация: 9.11.2007

Репутация: нет
Всего: нет



Известно, что программа не может изменять данные в Program Files, 
так как это системная защищённая папка.

Нужно периодически обновлять DLL-ки  в программе (C:\Program Files\MyProgram\Plugins) .

Как можно в папке Plugins поменять разрешения с чтения на запись ???

Ручками все весьма просто меняется для Пользователя.

Это сообщение отредактировал(а) Etud - 2.8.2011, 20:47
PM MAIL   Вверх
Riddik
Дата 2.8.2011, 21:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 598
Регистрация: 2.12.2006

Репутация: нет
Всего: нет



Если у пользователя нет админских прав, то в любую папку прога обломится писать файлы, кроме как в AppData.
Но как-то производители ПО обходят этот момент - их проги умеют апдейтиться из нета и писать в свою папку.
Вопрос я задал в теме рядом - как это делать?
PM MAIL   Вверх
asmdzen
Дата 2.8.2011, 21:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата



**


Профиль
Группа: Участник
Сообщений: 345
Регистрация: 28.11.2010

Репутация: 1
Всего: 5



Цитата(Etud @  2.8.2011,  20:45 Найти цитируемый пост)
Как можно в папке Plugins поменять разрешения с чтения на запись ???


Цитата(Riddik @  2.8.2011,  21:21 Найти цитируемый пост)
Но как-то производители ПО обходят этот момент

может когда прога устанавливается у инсталятора есть админ права и он устанавливает на свои папки какие хочет разрешения, типа записи?
PM MAIL   Вверх
Riddik
Дата 2.8.2011, 22:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 598
Регистрация: 2.12.2006

Репутация: нет
Всего: нет



с http://codehelper.ru есть решение для .Net, поможет кто-нибудь перевести на win32? (с/с++)
Код

public bool SetAcl(string pathname, string userRights, string username, bool inheritSubDirectories)
{
    if (string.IsNullOrEmpty(pathname))
    {
        return false;
    }

    pathname = pathname.TrimEnd('\\');
    var rights = (FileSystemRights)0;
    if (userRights == "R")
    {
        rights = FileSystemRights.ReadAndExecute;
    }
    else if (userRights == "C")
    {
        rights = FileSystemRights.ChangePermissions;
    }
    else if (userRights == "F")
    {
        rights = FileSystemRights.FullControl;
    }

    var accessRule = new FileSystemAccessRule(username, rights,
                                InheritanceFlags.None,
                                PropagationFlags.NoPropagateInherit,
                                AccessControlType.Allow);
    var info = new DirectoryInfo(pathname);
    var security = info.GetAccessControl(AccessControlSections.Access);
    bool result;
    security.ModifyAccessRule(AccessControlModification.Set, accessRule, out result);
    if (!result)
    {
        return false;
    }

    InheritanceFlags iFlags = InheritanceFlags.ObjectInherit;
    if (inheritSubDirectories)
    {
        iFlags = InheritanceFlags.ContainerInherit | InheritanceFlags.ObjectInherit;
    }
    accessRule = new FileSystemAccessRule(username, rights,
                                iFlags,
                                PropagationFlags.InheritOnly,
                                AccessControlType.Allow);

    security.ModifyAccessRule(AccessControlModification.Add, accessRule, out result);
    if (!result)
    {
        return false;
    }

    info.SetAccessControl(security);
    return true;


ссылка: тыц

Это сообщение отредактировал(а) Riddik - 2.8.2011, 22:04
PM MAIL   Вверх
Etud
Дата 2.8.2011, 22:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 35
Регистрация: 9.11.2007

Репутация: нет
Всего: нет



Цитата(Riddik @  2.8.2011,  21:21 Найти цитируемый пост)
Если у пользователя нет админских прав, то в любую папку прога обломится писать файлы, кроме как в AppData.Но как-то производители ПО обходят этот момент - их проги умеют апдейтиться из нета и писать в свою папку.Вопрос я задал в теме рядом - как это делать?


Не запишет в защищенные (Windows, Program Files, System), в другое место - пожалуйста.

Меняют разрешения на запись. Вот и я хочу поменять.






Это сообщение отредактировал(а) Etud - 2.8.2011, 22:50
PM MAIL   Вверх
Riddik
Дата 2.8.2011, 23:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 598
Регистрация: 2.12.2006

Репутация: нет
Всего: нет



Цитата(Etud @  2.8.2011,  22:46 Найти цитируемый пост)
Меняют разрешения на запись. Вот и я хочу поменять.

Ну а я к чему код привёл?

Вот и winдовая ф-ия http://msdn.microsoft.com/en-us/library/aa379575
PM MAIL   Вверх
xvr
Дата 3.8.2011, 16:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 7046
Регистрация: 28.8.2007
Где: Дублин, Ирландия

Репутация: 40
Всего: 223



Цитата(Riddik @  2.8.2011,  21:21 Найти цитируемый пост)
Но как-то производители ПО обходят этот момент - их проги умеют апдейтиться из нета и писать в свою папку.

Этим занимается не ПО производителей, а Windows Installer. Смотреть тут и тут

PM MAIL   Вверх
Riddik
Дата 3.8.2011, 17:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 598
Регистрация: 2.12.2006

Репутация: нет
Всего: нет



xvr, спасибо за ссылки!
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "C/C++: Системное программирование и WinAPI"
Fixin
GremlinProg
xvr
feodorv
  • Большое количество информации и примеров с использованием функций WinAPI можно найти в MSDN
  • Описание сообщений, уведомлений и примеров с использованием компонент WinAPI (BUTTON, EDIT, STATIC, и т.п.), можно найти в MSDN Control Library
  • Непосредственно, перед созданием новой темы, проверьте заголовок и удостоверьтесь, что он отражает суть обсуждения.
  • После заполнения поля "Название темы", обратите внимание на наличие и содержание панели "А здесь смотрели?", возможно Ваш вопрос уже был решен.
  • Приводите часть кода, в которой предположительно находится проблема или ошибка.
  • Если указываете код, пользуйтесь тегами [code][/code], или их кнопочными аналогами.
  • Если вопрос решен, воспользуйтесь соответствующей ссылкой, расположенной напротив названия темы.
  • Один топик - один вопрос!
  • Перед тем как создать тему - прочтите это .

На данный раздел распространяются Правила форума и Правила раздела С++:Общие вопросы .


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Chipset, Step, Fixin, GremlinProg, xvr. feodorv.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Системное программирование и WinAPI | Следующая тема »


 




[ Время генерации скрипта: 0.0846 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.