Создание папки Windows 7 в «Program Files» не удалось в коде C #, даже если у меня есть права администратора! - PullRequest
2 голосов
/ 25 апреля 2010

Я не могу создать файл в папке «Program Files» на моем 64-разрядном компьютере с Windows 7 в коде VS 2008 WPF C #. Ошибка я получаю по следующему коду

        myFile = File.Create(logFile);

следующее. (это трассировка стека innerException).

      at System.IO.__Error.WinIOError(Int32 errorCode, String maybeFullPath)
   at System.IO.FileStream.Init(String path, FileMode mode, FileAccess access, Int32 rights, Boolean useRights, FileShare share, Int32 bufferSize, FileOptions options, SECURITY_ATTRIBUTES secAttrs, String msgPath, Boolean bFromProxy)
   at System.IO.FileStream..ctor(String path, FileMode mode, FileAccess access, FileShare share, Int32 bufferSize, FileOptions options)
   at System.IO.File.Create(String path)
   at MyFirm.MyPricingApp.UI.App.InitializeLogging() in C:\Projects\MyPricingApp\App.xaml.cs:line 150
   at MyFirm.MyPricingApp.UI.App.Application_Startup(Object sender, StartupEventArgs e) in C:\Projects\MyPricingApp\App.xaml.cs:line 38
   at System.Windows.Application.OnStartup(StartupEventArgs e)
   at System.Windows.Application.<.ctor>b__0(Object unused)
   at System.Windows.Threading.ExceptionWrapper.InternalRealCall(Delegate callback, Object args, Boolean isSingleParameter)
   at System.Windows.Threading.ExceptionWrapper.TryCatchWhen(Object source, Delegate callback, Object args, Boolean isSingleParameter, Delegate catchHandler)

Похоже, что это как-то связано с UAC в Windows 7, потому что зачем мне еще это получать, так как мой пользователь уже является администратором на машине?!

Кроме того, поскольку WinIOError имеет SECURITY_ATTRIBUTES, я думаю, что это как-то связано с безопасностью «по-новому», которая обрабатывается в Windows 7.

Я попытался перейти к папке «Program Files», в которой должны были быть созданы папка и файл журнала. Я могу создать папку вручную, но когда я пытаюсь создать файл, я получаю аналогичное исключение «Отказано в доступе».

1 Ответ

6 голосов
/ 25 апреля 2010

Поскольку UAC включен, программы не запускаются с правами администратора, даже если ваша учетная запись является администратором.
Чтобы иметь права администратора, вам нужно щелкнуть правой кнопкой мыши приложение и выбрать Запуск от имени администратора.

Однако ваша программа не должна ничего записывать в Program Files после установки, кроме случаев установки обновлений.
Вместо этого вам следует сохранить файл журнала в папке данных приложения пользователя.

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