Получено System.InvalidOperationException: метод не выполнен с непредвиденным кодом ошибки 64
Я работаю над получением разрешения папки перед доступом в C#
в консольном приложении путь к папке может быть локальным для ftp.Same работает на моей машине, но при развертывании на рабочем сервере выдает ошибку запуска System.InvalidOperationException: Method failed with unexpected error code 64
,
Точная ошибка получения по коду
System.InvalidOperationException: Method failed with unexpected error code 64.
at System.Security.AccessControl.NativeObjectSecurity.CreateInternal(ResourceType resourceType, Boolean isContainer, String name, SafeHandle handle, AccessControlSections includeSections, Boolean createByName, ExceptionFromErrorCode exceptionFromErrorCode, Object exceptionContext)
at System.Security.AccessControl.FileSystemSecurity..ctor(Boolean isContainer, String name, AccessControlSections includeSections, Boolean isDirectory)
at System.Security.AccessControl.DirectorySecurity..ctor(String name, AccessControlSections includeSections)
at UploadData.FolderManager.IsConfiguredFolderAccessible(String path, Folder folder)
Полный код ошибки
private static void IsConfiguredFolderAccessible(string path, Folder folder)
{
// If the file can be opened for exclusive access it means that the file
// is no longer locked by another process.
try
{
if (!Directory.Exists(path))
{
LogHelper.Log(string.Format("Folder does not exist on given path {0}. Please re-create folder, grant permission and re-start the UPC utility. ", folder.Path), LogHelper.LogLevel.Error);
MailComponent.SendMail(string.Format("Folder does not exist on given path {0}. Please re-create folder, grant permission and re-start the UPC utility.", folder.Path), "Folder does not exist");
return;
}
else
{
var accessControlList = Directory.GetAccessControl(path);
if (accessControlList == null)
{
LogHelper.Log(string.Format("AccessControlList on Folder {0} are not defined", folder.ToString()), LogHelper.LogLevel.Error);
MailComponent.SendMail(folder.ToString(), "AccessControlList on Folder are not defined");
}
var accessRules = accessControlList.GetAccessRules(true, true,
typeof(System.Security.Principal.SecurityIdentifier));
if (accessRules == null)
{
LogHelper.Log(string.Format("AccessRules on Folder {0} are not defined", folder.ToString()), LogHelper.LogLevel.Error);
MailComponent.SendMail(folder.ToString(), "AccessRules on Folder are not defined");
}
foreach (FileSystemAccessRule rule in accessRules)
{
if ((FileSystemRights.Write & rule.FileSystemRights) != FileSystemRights.Write)
continue;
if (rule.AccessControlType == AccessControlType.Deny)
{
LogHelper.Log(string.Format("Access permission denied on Folder {0}", path), LogHelper.LogLevel.Error);
MailComponent.SendMail(folder.ToString(), string.Format("Access permission denied on Folder {0}", path));
}
}
}
}
catch (PrivilegeNotHeldException pv)
{
LogHelper.Log(string.Format("Access permission denied on Folder {0}, Error detail : {1}", path, pv.ToString()), LogHelper.LogLevel.Error);
MailComponent.SendMail(pv.ToString(), string.Format("Access permission denied on Folder {0}", path));
throw pv;
}
catch (IOException io)
{
LogHelper.Log(string.Format("Folder does not exist on given path {0}, Error detail : {1}", path, io.ToString()), LogHelper.LogLevel.Error);
MailComponent.SendMail(io.ToString(), string.Format("Folder does not exist on given path {0}.Please re-create folder, grant permission and re-start the UPC utility.", path));
throw io;
}
catch (Exception ex)
{
LogHelper.Log(string.Format("General error occured on Folder {0}, Error detail : {1}", path, ex.ToString()), LogHelper.LogLevel.Error);
MailComponent.SendMail(ex.ToString(), "General error occured");
throw ex;
}
}
1 ответ
Решение
Ошибка генерируется при звонке на родную винду GetSecurityInfo()
функция. Вы можете увидеть это в исходном коде для NativeObjectSecurity
учебный класс. Ошибка 64 или 0x40 в шестнадцатеричном виде имеет следующее определение в winerror.h
:
ERROR_NETNAME_DELETED
Указанное имя сети больше не доступно.
Таким образом, ваша проблема, скорее всего, связана с доступом к папке по сети.