简体   繁体   中英

Got System.InvalidOperationException: Method failed with unexpected error code 64

I am working on getting folder's permission before access in C# console application , the path of folder could be local of ftp.Same is working on my machine but when deploy at production server its start throwing error System.InvalidOperationException: Method failed with unexpected error code 64 .

The exact error receive by code is

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)

The full code that thrown error is

 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;
        }
    }

The error is generated by a call to the native Windows GetSecurityInfo() function. You can see this in the source code for the NativeObjectSecurity class. Error 64 or 0x40 in hex has the following definition in winerror.h :

ERROR_NETNAME_DELETED

The specified network name is no longer available.

So your problem is most likely related to accessing a folder across the network.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM