Политика безопасности Windows 7: как разрешить моему приложению .NET записывать на диск «C:»? - PullRequest
3 голосов
/ 01 марта 2010

Мое приложение не должно выполнять никаких административных задач, поэтому я хочу, чтобы обычная учетная запись пользователя могла его запускать. Единственное, что мое приложение читает и записывает в файл базы данных; если пользователь под управлением Windows 7 (или Vista) устанавливает мое приложение на диск C, конфигурация набора разрешений диска по умолчанию не позволяет моему приложению записывать данные.

Как мне разрешить моему приложению писать в C:, не требуя полных прав администратора?

Ответы [ 5 ]

1 голос
/ 12 мая 2011

Вам необходимо открыть UAC (доступ к учетной записи пользователя) и установить ползунок безопасности внизу. Затем вы можете получить доступ к диску C: как в Windows XP.

1 голос
/ 01 марта 2010

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

1 голос
/ 01 марта 2010

Я бы посоветовал хранить файл БД в папке «Документы и настройки» / «Данные приложения» / «Ваше приложение / каталог». Он существует специально для этой цели. Запись в C: / Program Files - не очень хорошая практика. Если это возможно в вашем случае, то есть.

0 голосов
/ 18 декабря 2010

Я решил изменить права доступа к каталогу в процессе установки, поэтому создал файл .exe, который изменяет права доступа к его пути запуска и дает всем пользователям доступ к этому пути. Я просто включил этот файл .exe в свой проект развертывания и создал пользовательское действие, которое будет запускать файл на этапе фиксации установки.

Поскольку программа установки запрашивает права администратора при установке, мой .exe также обладает правами администратора и может изменять разрешения для каталога установки.

В моем .exe я использовал экземпляр Process для запуска утилиты ACL, поставляемой с Windows (icacls.exe), следующим образом:

ICACLS.EXE [TargetDir] /T /C /grant Users:F

(Убедитесь, что [TargetDir] не заканчивается на «\», иначе вызов не удастся.)

Это дает всем пользователям полный доступ к целевому каталогу. Я мог бы также написать код .NET и изменить права доступа к каталогам вручную, но я немного ленив!

Однако вы можете тщательно проверить состояние вашей среды, чтобы то, что вы делаете, не стало дырой в безопасности вашей среды; но это было подходящим для меня.

Надеюсь, это поможет другим, кто столкнулся с той же проблемой.

0 голосов
/ 01 марта 2010

Пользователь по умолчанию должен иметь права на запись на диск C: если нет, то вам нужно будет изменить каталог, из которого вы читаете и записывать, на исполняющий каталог (C: / Program Files / Your App /), а не чем корень C:

Вы можете получить это

String Path = Path.GetDirectoryName(Application.ExecutablePath);
...