Я написал командный файл, который создает файл в корневой папке диска C:. Однако, если вы войдете как обычный пользователь, файл не будет создан, и я получу ошибку "Отказано в доступе".

Как я могу избежать этой проблемы?

4 ответа4

6

Пользователь не имеет разрешения на запись в корень диска. Вам нужно создать файл в месте, к которому у пользователя есть права на запись. Например, их папка Application Data. Корень диска C, как правило, заблокирован, чтобы вы не могли писать в него, так как это не рекомендуется.

Если вам абсолютно необходимо записать в корень диска, отредактируйте разрешения NTFS для диска, чтобы позволить пользователю писать на него. Но имейте в виду, что это не очень хороший способ.

1

Как уже говорилось, рекомендуется использовать % TEMP% или % TMP%, если нет необходимости отслеживать / сохранять файл. Если нет, я бы просто использовал % USERPROFILE% (c:\Documents and Settings\normal), где «normal» - это ваше имя пользователя ... так как это самое простое / логичное место для его размещения, если у вас нет необходимых прав для получить доступ к корневому каталогу. % USERPROFILE%\desktop, если вы хотите разместить его на рабочем столе для быстрого доступа.

0

Вместо использования "жестко закодированного" пути вы можете использовать тот, который обычно может быть записан, например, %appdata% или %UserProfile% . Там вы можете создать файл или, предпочтительно, папку / каталог, который будет использоваться вашим командным файлом.

Кроме того, вы можете попросить пользователя указать абсолютное имя файла для использования.

Если вам действительно нужны права администратора, вы можете использовать команду runas (например, с savecred) из своего скрипта.

0

Я полностью согласен с тем, что здесь уже было сказано. Кроме того, я думаю, что %UserProfile% иногда не является предпочтительным местом для размещения временных файлов. Вместо этого вы можете использовать %TEMP% для таких вещей. Для данных, которые должны быть постоянно доступны пользователю, вы можете использовать %AppData%\someFolderName . Основное преимущество %AppData% заключается в том, что он также перемещается на другие машины, если в корпоративных средах включены перемещаемые профили.

Помните, что %TEMP% зависит от пользователя. Таким образом, каждый пользователь, входящий в систему, будет иметь свой собственный временный файл, который не является общим. Если вам нужно обмениваться файлами между несколькими пользователями, вам следует рассмотреть возможность размещения файла где-нибудь в %PUBLIC% который доступен для всех пользователей на машине.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .