Я написал командный файл, который создает файл в корневой папке диска C:. Однако, если вы войдете как обычный пользователь, файл не будет создан, и я получу ошибку "Отказано в доступе".
Как я могу избежать этой проблемы?
Я написал командный файл, который создает файл в корневой папке диска C:. Однако, если вы войдете как обычный пользователь, файл не будет создан, и я получу ошибку "Отказано в доступе".
Как я могу избежать этой проблемы?
Пользователь не имеет разрешения на запись в корень диска. Вам нужно создать файл в месте, к которому у пользователя есть права на запись. Например, их папка Application Data. Корень диска C, как правило, заблокирован, чтобы вы не могли писать в него, так как это не рекомендуется.
Если вам абсолютно необходимо записать в корень диска, отредактируйте разрешения NTFS для диска, чтобы позволить пользователю писать на него. Но имейте в виду, что это не очень хороший способ.
Как уже говорилось, рекомендуется использовать % TEMP% или % TMP%, если нет необходимости отслеживать / сохранять файл. Если нет, я бы просто использовал % USERPROFILE% (c:\Documents and Settings\normal), где «normal» - это ваше имя пользователя ... так как это самое простое / логичное место для его размещения, если у вас нет необходимых прав для получить доступ к корневому каталогу. % USERPROFILE%\desktop, если вы хотите разместить его на рабочем столе для быстрого доступа.
Вместо использования "жестко закодированного" пути вы можете использовать тот, который обычно может быть записан, например, %appdata%
или %UserProfile%
. Там вы можете создать файл или, предпочтительно, папку / каталог, который будет использоваться вашим командным файлом.
Кроме того, вы можете попросить пользователя указать абсолютное имя файла для использования.
Если вам действительно нужны права администратора, вы можете использовать команду runas
(например, с savecred) из своего скрипта.
Я полностью согласен с тем, что здесь уже было сказано. Кроме того, я думаю, что %UserProfile%
иногда не является предпочтительным местом для размещения временных файлов. Вместо этого вы можете использовать %TEMP%
для таких вещей. Для данных, которые должны быть постоянно доступны пользователю, вы можете использовать %AppData%\someFolderName
. Основное преимущество %AppData%
заключается в том, что он также перемещается на другие машины, если в корпоративных средах включены перемещаемые профили.
Помните, что %TEMP%
зависит от пользователя. Таким образом, каждый пользователь, входящий в систему, будет иметь свой собственный временный файл, который не является общим. Если вам нужно обмениваться файлами между несколькими пользователями, вам следует рассмотреть возможность размещения файла где-нибудь в %PUBLIC%
который доступен для всех пользователей на машине.