2016-04-25 37 views
0

C#コンソールアプリケーションにアクセスする前にフォルダのアクセス権を取得しようとしていますが、フォルダーのパスはftpのローカルになる可能性があります。サーバーは、エラーSystem.InvalidOperationException: Method failed with unexpected error code 64を投げ始めます。Got System.InvalidOperationException:メソッドが予期しないエラーコード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) 

スローエラーはエラーがネイティブのWindows GetSecurityInfo()関数の呼び出しによって生成される

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

[this](http://www.novell.com/support/kb/doc.php?id=7006001)をご覧ください。これがあなたを助けることを願っています。 –

答えて

0

で完全なコードです。これはNativeObjectSecurityクラスのソースコードで確認できます。指定されたネットワーク名は利用できません

ERROR_NETNAME_DELETED

:六角でのエラー64または0x40のはwinerror.hで次のように定義していません。

問題は、ネットワーク経由でフォルダにアクセスすることに関連している可能性があります。

+0

どうすればそのエラーを管理でき、理想的にはログファイルに記録されているはずです。 –

+0

@ NeerajDubey:あなたのコードには多くの例外処理があります。それを拡大し、 'InvalidOperationException'をキャッチします。特に "エラー64"を処理したい場合は、例外メッセージを解析する必要があります。リンク先の参照元では、例外がどのようにスローされるのかを見ることができます。しかし、.NETソースコードの仕様に応じて、コードとあなたのコントロールの外にあるものとの間に密接な結合が作成されます。 –

関連する問題