Проверьте, есть ли у пользователя разрешение на запись в «Program Files» - PullRequest
2 голосов
/ 01 июля 2010

Мне нужно проверить, есть ли у текущего пользователя разрешения на запись в папке Program Files.
Основная проблема возникает в Vista / 7 - если я просто пытаюсь создать временный файл в этом месте, я получаю исключение,даже если пользователь может выполнить такую ​​операцию с помощью проводника Windows (после разрешения повышения UAC).Звучит разумно, поскольку сам процесс не запускался с правами администратора.
Затем я попытался использовать это решение, но я всегда получал "true", даже когда пытался запустить его со стандартным (не-admin) пользователь.

В конечном итоге я хочу ответить, если пользователь попытается создать каталог внутри Program Files, ему потребуется предоставить учетные данные администратора или просто нажать «продолжить».в UAC достаточно?
Я ищу способ ответить на этот вопрос, не поднимая всплывающее окно UAC (любого типа) самостоятельно.Есть ли относительно простой способ сделать это?

ОБНОВЛЕНИЕ

Спасибо за предложение использовать папку UserData, но мне просто нужно знать, есть ли у пользователя доступ на запись в папку, поэтому яможет решить, должен ли я попытаться выполнить автообновление (которое запускает msi), или нет.

Ответы [ 3 ]

6 голосов
/ 01 июля 2010

Лучшее решение - просто хранить данные приложения там, где вы должны:

Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData);
3 голосов
/ 01 июля 2010

Было бы лучше придерживаться правил. Обратите внимание, что не все пользователи могут повысить уровень с помощью UAC. И вы можете попытаться написать, и это может показаться успешным, но с Vista / Win7 «виртуализирует» вашу запись где-то еще.

Поскольку вы отметили этот C # и Windows, взгляните на

string dataPath = 
   Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData);
0 голосов
/ 01 июля 2010

Есть веские причины, по которым расположение ProgramFiles не разрешает доступ для записи без согласия пользователя. Вы должны были бы либо

  1. запускать ваше приложение всегда с повышенными правами (запрашивая согласие пользователя при каждом запуске) или
  2. использовать сервис для автообновления
  3. загрузить обновление во временную папку пользователя, а затем запустить обновление с повышением прав

Варианты 1 и 2 имеют серьезные недостатки, поэтому я рекомендую перейти к варианту 3. Этот способ также используется другими приложениями (например, FireFox).

...