Проблемы с UAC при создании каталогов и текстовых файлов в Windows 7 - PullRequest
3 голосов
/ 16 ноября 2011

У меня есть программа, которая должна создать текстовый журнал. В XP все работало просто отлично, но когда я тестировал его на Windows 7 - и позже был обновлен до Windows 7 для моего компьютера разработчика - я получаю сообщение об ошибке «Доступ к пути» C: \ Program Files (x86) \ Ludlum Measurements, Inc \ LMI Universal Software \ UniversalLog \ 'отказано ". Я получаю аналогичную ошибку, если у меня есть установщик, создающий папку и затем пытающийся создать текстовый файл в папке.

Я знаю, что это как-то связано с разрешениями, но что я должен дать разрешение и как?

Программы, которые используют функцию регистрации?

Папка, в которую входят логи?

Папка, в которой находятся программы?

И как это исправление будет работать в XP, Vista, Server 2005 и Server 2008 и в качестве службы (часть программы работает как форма Windows, а часть как служба)?

-Edit- Акцент добавлен.

Повторим: как это будет работать при установке и запуске на XP? Сервер 2003? Сервер 2008? Это создаст для них проблемы?

И новый вопрос: может ли моя программа получить доступ к файлам из файла ApplicationData? Я только что вспомнил, что вся проблема возникла из-за того, что я пытался создать файл конфигурации, содержащий информацию о подключении к базе данных SQL. Ударившись головой о кирпичную стену в течение дня, вы можете забыть, почему вы начали это делать. И снова, это изначально работало в XP, Server 2005 и Server 2008.

Ответы [ 2 ]

4 голосов
/ 16 ноября 2011

Вы не должны ничего записывать в каталог Program Files после установки, если вы на самом деле не исправляете свое приложение.Повседневное использование файлов должно идти в папку данных приложения (LocalApplicationData для данных без роуминга и ApplicationData для данных роуминга).

string path = Environment.GetFolderPath(
    EnvironmentFolders.SpecialFolders.LocalApplicationData)

http://msdn.microsoft.com/en-us/library/system.environment.specialfolder.aspx

4 голосов
/ 16 ноября 2011

Вы должны использовать Environment.GetFolderPat h и выбрать папку Environment.SpecialFolder , которая имеет разрешения на запись при включенном UAC, и записывать туда свои файлы журнала. .

По умолчанию в UAC у вас нет прав на запись в C: \ Program Files или его подпапки.

Environment.ApplicationData обычно является хорошим выбором, по умолчанию он доступен для записи на XP, Vista, Server 2005 и Server 2008, если администратор не заблокировал слишком много вещей

Teach Your Apps To Play Nicely With Windows Vista User Account Control - хороший ресурс о том, как написать приложение, которое хорошо работает в UAC

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...