Доступ запрещен к пути при записи XML в iis
System.UnauthorizedAccessException: Access to the path 'C:\Inetpub\wwwroot\Spicee Webservice\App_Data\Employee.xml' is denied.
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)
at System.Xml.XmlTextWriter..ctor(String filename, Encoding encoding)
at ResturantService.InsertDatabaseXML(String servername, String dbusername, String dbpassword, String dbname, String port)
Я получаю вышеуказанную ошибку, когда пытаюсь написать XML-файл. Код работает нормально, когда я запускаю его из VS2008.
Я знаю, что это связано с набором разрешений для папки iis. Но я не хочу делать руководство по настройке разрешений, потому что наш план состоит в том, чтобы распространять приложение через пакет развертывания веб-сайта. У пользователя не будет идеи устанавливать разрешение вручную.
Также, когда я пытаюсь установить разрешение для папки, используя приведенный ниже код для iisuser.
Directory.CreateDirectory(sPathName);
DirectoryInfo info = new DirectoryInfo(sPathName);
DirectorySecurity security = info.GetAccessControl();
security.AddAccessRule(new FileSystemAccessRule(@"TAG1\IUSR_TAG1", FileSystemRights.FullControl, InheritanceFlags.ContainerInherit, PropagationFlags.None, AccessControlType.Allow));
security.AddAccessRule(new FileSystemAccessRule(@"TAG1\IUSR_TAG1", FileSystemRights.FullControl, InheritanceFlags.ObjectInherit, PropagationFlags.None, AccessControlType.Allow));
info.SetAccessControl(security);
я получаю эту ошибку.
System.UnauthorizedAccessException: Attempted to perform an unauthorized operation.
at System.Security.AccessControl.Win32.SetSecurityInfo(ResourceType type, String name, SafeHandle handle, SecurityInfos securityInformation, SecurityIdentifier owner, SecurityIdentifier group, GenericAcl sacl, GenericAcl dacl)
at System.Security.AccessControl.NativeObjectSecurity.Persist(String name, SafeHandle handle, AccessControlSections includeSections, Object exceptionContext)
at System.Security.AccessControl.NativeObjectSecurity.Persist(String name, AccessControlSections includeSections)
at System.Security.AccessControl.FileSystemSecurity.Persist(String fullPath)
at System.IO.Directory.SetAccessControl(String path, DirectorySecurity directorySecurity)
at System.IO.DirectoryInfo.SetAccessControl(DirectorySecurity directorySecurity)
at ResturantService.InsertDatabaseXML(String servername, String dbusername, String dbpassword, String dbname, String port)
Пожалуйста, помогите мне в решении этой проблемы.
Заранее спасибо.
1 ответ
Что ж, вам нужно изменить все, что вы используете для развертывания своего сайта, чтобы дать разрешения на запись для любой учетной записи, используемой для выполнения этого кода, или вам нужно поместить ее в другое место, или вам нужно создать другую учетную запись, которая может это делать, так что вы не раздаете разрешение каждому и его собаке.
Это не отличается от того, как система работает вручную. Если вы вошли в систему как пользователь с низкими правами, вы не можете просто назначить себе более высокие права. Вы должны быть авторизованы на более высоком уровне, чтобы сделать это. Это как удар UAC или SUDO.