2016-04-25 10 views
0

Ich arbeite an erhalten Ordner Berechtigung vor dem Zugriff in C# Konsolenanwendung, der Pfad des Ordners könnte lokal von ftp.Same funktioniert auf meinem Computer, aber bei der Bereitstellung bei der Produktion Server startet Fehler werfen System.InvalidOperationException: Method failed with unexpected error code 64.Got System.InvalidOperationException: Methode fehlgeschlagen mit unerwarteten Fehlercode 64

Die genaue Fehler-Code erhalten ist

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) 

Der vollständige Code, der geworfener Fehler

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

Werfen Sie einen Blick auf [diese] (http://www.novell.com/support/kb/doc.php?id=7006001). Ich hoffe, das wird dir helfen. –

Antwort

0

Der Fehler ist durch einen Aufruf der nativen Windows-GetSecurityInfo() Funktion erzeugt. Sie können dies im Quellcode für die Klasse NativeObjectSecurity sehen. Fehler 64 oder 0x40 in hex hat die folgende Definition in winerror.h:

ERROR_NETNAME_DELETED

Der angegebene Netzwerkname ist nicht mehr verfügbar.

Ihr Problem hängt wahrscheinlich mit dem Zugriff auf einen Ordner im Netzwerk zusammen.

+0

Also wie kann ich diesen Fehler verwaltet, idealerweise sollte es in Protokolldatei gefangen und protokolliert werden. –

+0

@NeerajDubey: Sie haben viele Ausnahmen in Ihrem Code. Erweitern Sie dies und fangen Sie "InvalidOperationException" ab. Wenn Sie "Fehler 64" spezifisch behandeln möchten, müssen Sie die Ausnahmebedingungsnachricht parsen. In der verknüpften Referenzquelle können Sie sehen, wie die Ausnahmen ausgelöst werden. Je nach den Besonderheiten des .NET-Quellcodes entsteht jedoch eine enge Verbindung zwischen Ihrem Code und etwas, das außerhalb Ihrer Kontrolle liegt. –