Доступ к пути 'c: \ ApplicationFolder' запрещен - PullRequest
3 голосов
/ 13 декабря 2008

Я получаю странную ошибку на удаленных клиентах Windows (приложение WinForm, использующее C # 2.0)

Сообщение об ошибке: доступ к пути «c: \ ApplicationFolder» запрещен.

Трассировка стека: в System.IO .__ Error.WinIOError (Int32 errorCode, String MaybeFullPath) at System.IO.FileStream.Init (Строковый путь, режим FileMode, доступ FileAccess, права Int32, логическое значение useRights, общий ресурс FileShare, параметры типа3232 bufferSize, опции FileOptions, SECURITY_ATTRIBUTES secAttrs, строка msgPath, логический bFromProxy)

Позвольте мне сказать, что я не должен помещать папку приложения непосредственно из папки c: \. Это старое приложение, которое я не могу контролировать.

Ответы [ 7 ]

6 голосов
/ 13 декабря 2008

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

Вы проверили разрешения для папки?

5 голосов
/ 01 января 2009

Возможно, вы пытаетесь получить доступ для записи в файл только для чтения.

3 голосов
/ 13 декабря 2008

Вопрос и предложение.

Путь к файлу, указанный в сообщении , точно соответствует названию папки - регистр букв, пробелы, подчеркивания, акценты, все?

Почему? Я видел странные случаи, когда это вызывало проблемы.

Предложение: используйте ProcessMonitor (от SysInternals, теперь часть Microsoft), чтобы наблюдать за доступом к папке, вы увидите более подробную информацию об ошибке - особенно полезно, если сообщение об ошибке вы видите не точный.

0 голосов
/ 26 мая 2012

Создайте и вставьте файл манифеста в ваше приложение, чтобы получить административные права для вашего приложения

Executable: IsUserAdmin.exe 
Manifest:IsUserAdmin.exe.manifest
Sample application manifest file:
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0"> 
  <assemblyIdentity version="1.0.0.0"
     processorArchitecture="X86"
     name="IsUserAdmin"
     type="win32"/> 
  <description>Description of your application</description> 
  <!-- Identify the application security requirements. -->
  <trustInfo xmlns="urn:schemas-microsoft-com:asm.v2">
    <security>
      <requestedPrivileges>
        <requestedExecutionLevel
          level="requireAdministrator"
          uiAccess="false"/>
        </requestedPrivileges>
       </security>
  </trustInfo>
</assembly>

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

0 голосов
/ 31 декабря 2008

System.IO.FileStream.Init звучит так, будто вы открываете файл, а не папку. Что это за файл?

Вы уверены, что файл существует? Что это не открывается другим приложением? Вы пытаетесь записать в файл? Он заблокирован или доступен только для чтения?

Нам нужно увидеть код, открывающий файл.

0 голосов
/ 30 декабря 2008

Согласитесь, полезен монитор процессов, сэкономил несколько часов моего дня. Перевернули аргументы в Path.Combine, и я попытался записать в каталог вместо файла. нет никаких подсказок в отладке, процесс mon показался правильно.

0 голосов
/ 13 декабря 2008

Загружает ли приложение хотя бы «папку приложения» из файла конфигурации / реестра / таблицы базы данных? Если да, что произойдет, если вы измените это значение на что-то в папке «Мои документы»?

Я видел, что вы добавили, что пользователь является администратором и имеет полные права администратора, поэтому я должен спросить очевидное - существует ли папка, в которой код считает, что она должна?

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