C〓〓のプログラムを使ってシステムを検証してユーザーとディレクトリの権限を登録します。


Windowsユーザータイプ:Administrator、Gusest、カスタムユーザーなど。ファイルのパーミッションはRead、Write、Modify、Removeなど、すべての権限を持つ文字をフルコントロルといいます。
C〓今のプログラムのユーザーパス権限の検証

/// <summary>
  ///             
  /// </summary>
  private static bool HasProgramDataRights=false;
 
  public static bool IsAdministrator()
  {
   System.Security.Principal.WindowsIdentity identity = System.Security.Principal.WindowsIdentity.GetCurrent();
   System.Security.Principal.WindowsPrincipal principal = new System.Security.Principal.WindowsPrincipal(identity);
   return principal.IsInRole(System.Security.Principal.WindowsBuiltInRole.Administrator);
  }
 
  /// <summary>
  ///             &                  
  /// </summary>
  /// <param name="path"></param>
  public void ReadProgramDataRights(string path)
  {
   //               
   System.Security.AccessControl.DirectorySecurity dirSec = new System.IO.DirectoryInfo(path).GetAccessControl();
   System.Security.AccessControl.AuthorizationRuleCollection rules = dirSec.GetAccessRules(true, true, typeof(System.Security.Principal.NTAccount));
   foreach (System.Security.AccessControl.FileSystemAccessRule rule in rules)
   {
    Console.WriteLine(path + "        :" + rule.FileSystemRights);
    //         FullControl Write  
    if (rule.FileSystemRights.ToString().Equals("FullControl") || rule.FileSystemRights.ToString().Equals("Write"))
    {
     HasProgramDataRights = true;
     break;
    }
   }
   //  IE            
   if (HasProgramDataRights)
   {
    //       
    string recordTemp = FileHelp.GetAppDataLocalLow() + "\\CvNetVideo\\Record\\";
    string screenshotTemp = FileHelp.GetAppDataLocalLow() + "\\CvNetVideo\\Screenshot\\";
    string recordDst = FileHelp.GetCommonApplicationData() + "\\CvNetVideo\\Record\\";
    string screenshotDst = FileHelp.GetCommonApplicationData() + "\\CvNetVideo\\Screenshot\\";
    Directory.CreateDirectory(recordTemp);
    Directory.CreateDirectory(screenshotTemp);
    Directory.CreateDirectory(recordDst);
    Directory.CreateDirectory(screenshotDst);
   }
  }
C〓〓書類操作工具類

public class FileHelp
 {
  public enum GetDirectoryType
  {
   ByAppDomain,
   ByAssembly
  }
  public static string GetCurrentDirectory(GetDirectoryType type = GetDirectoryType.ByAppDomain)
  {
   switch (type)
   {
    case GetDirectoryType.ByAppDomain:
     return AppDomain.CurrentDomain.BaseDirectory;
    case GetDirectoryType.ByAssembly:
 
     return Path.GetDirectoryName(System.Reflection.Assembly.GetExecutingAssembly().Location);
    default:
     return AppDomain.CurrentDomain.BaseDirectory;
   }
  }
  public static string GetCurrentDirectoryByAssembly()
  {
   return GetCurrentDirectory(GetDirectoryType.ByAssembly);
  }
 
  /// <summary>
  ///      - C:\ProgramData
  /// </summary>
  /// <returns></returns>
  public static string GetCommonApplicationData()
  {
   return Environment.GetFolderPath(Environment.SpecialFolder.CommonApplicationData);
  }
 
  /// <summary>
  ///       
  /// </summary>
  /// <returns></returns>
  public static string GetApplicationData()
  {
   return Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData);
  }
 
  /// <summary>
  ///         
  /// </summary>
  /// <returns></returns>
  public static string GetLocalApplicationData()
  {
   return Environment.GetFolderPath(Environment.SpecialFolder.LocalApplicationData);
  }
 
  /// <summary>
  ///     
  /// </summary>
  /// <returns></returns>
  public static string GetUserProfile()
  {
   return Environment.GetFolderPath(Environment.SpecialFolder.UserProfile);
  }
 
  /// <summary>
  ///        
  /// </summary>
  /// <returns></returns>
  public static string GetMyPictures()
  {
   return Environment.GetFolderPath(Environment.SpecialFolder.MyPictures);
  }
 
  /// <summary>
  ///        
  /// </summary>
  /// <returns></returns>
  public static string GetMyVideos()
  {
   return Environment.GetFolderPath(Environment.SpecialFolder.MyVideos);
  }
 
  /// <summary>
  ///        
  /// </summary>
  /// <returns></returns>
  public static string GetMyDocuments()
  {
   return Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments);
  }
 
  /// <summary>
  /// IE             (Temporary Internet Files/Low)
  /// </summary>
  /// <returns></returns>
  public static string GetTemporaryInternetFiles()
  {
   return GetLocalApplicationData()+ "\\Microsoft\\Windows\\Temporary Internet Files\\Low";
  } 
  /// <summary>
  /// IE             (%userprofile%/AppData/LocalLow)
  /// </summary>
  /// <returns></returns>
  public static string GetAppDataLocalLow()
  {
   return GetUserProfile() + "\\AppData\\LocalLow";
  }
 
  /// <summary>
  ///           
  /// </summary>
  /// <returns></returns>
  public static string GetFonts()
  {
   return Environment.GetFolderPath(Environment.SpecialFolder.Fonts);
  } 
  /// <summary>
  ///        
  /// </summary>
  /// <param name="FileUrl">    </param>
  /// <returns></returns>
  public static byte[] BinaryRead(string FileUrl)
  {
   List<byte> lst = new List<byte>();
   try
   {
    //    
    String filename = FileUrl;
    //    
    FileStream FStream;
    if (File.Exists(filename))
    {
     FStream = new FileStream(filename, FileMode.Open);
    }
    else
    {
     return null;
    }
    int BufferSize = 1048576; //             1MB
    byte[] Buffer = new byte[BufferSize];
    long FileLength = FStream.Length;//      
    int ReadCount = (int)(FileLength / BufferSize) + 1; //          
                 //    
    BinaryReader BWrite = new BinaryReader(FStream);
    //br.BaseStream.Seek(0, SeekOrigin.Begin);
    //while (br.BaseStream.Position < br.BaseStream.Length){}
    for (int a = 0; a < ReadCount; a++)
    {
     Buffer = BWrite.ReadBytes(BufferSize);
     lst.AddRange(Buffer);
    }
    BWrite.Close();
    BWrite.Close();
    return lst.ToArray();
   }
   catch (System.Exception ex)
   {
    Log.WriteLog4Ex("FileHelp.BinaryRead", ex);
    return null;
   }
  } 
  /// <summary>
  ///        
  /// </summary>
  /// <param name="Bts"></param>
  /// <param name="DirectoryUrl">      </param>
  /// <param name="FileName">    </param>
  /// <returns></returns>
  public static bool BinaryWrite(byte[] Bts, string DirectoryUrl, string FileName)
  {
   try
   {
    //    
    string Filepath = DirectoryUrl + "\\" + FileName;
    //    
    if (!Directory.Exists(DirectoryUrl))
     Directory.CreateDirectory(DirectoryUrl);
    //    
    FileStream FStream;
    if (File.Exists(Filepath))
    {
     FStream = new FileStream(Filepath, FileMode.Append);
    }
    else
    {
     FStream = new FileStream(Filepath, FileMode.Create);
    }
    //    
    BinaryWriter BWrite = new BinaryWriter(FStream);
    BWrite.Write(Bts);
    BWrite.Close();
    FStream.Close();
    return true;
   }
   catch (System.Exception ex)
   {
    Log.WriteLog4Ex("FileHelp.BinaryWrite", ex);
    return false;
   }
  } 
  /// <summary>
  ///        
  /// </summary>
  /// <param name="FileUrl">    </param>
  public static void FileDelete(string FileUrl)
  {
   try
   {
    //    
    String filename = FileUrl;
    //    
    if (File.Exists(filename))
    {
     File.Delete(filename);
    }
   }
   catch (System.Exception ex)
   {
    Log.WriteLog4Ex("FileHelp.FileDelete", ex);
   }
  }
 }
注:OCXを開発する場合、パスに問題がある場合は、ツールクラスのIE保護モードでの低アクセスパスを使用してください。
補足知識:C㌘ファイルまたはフォルダの権限を変更し、ユーザー、ユーザーグループを指定するために完全制御権限を追加します。
前に書く
windowsシステムでは、c盤のディレクトリの権限が高く、インストールパッケージを作成する場合には、デフォルトのインストールパスはc盤ですが、実行可能ファイルに対しては、完全制御権限を追加するか、読み書き権限を追加する必要があります。ここで当時の解決策を記録します。
コードの実装
Cディスクにフォルダを追加し、フォルダ内にテキストファイルを作成します。

このフォルダの下にテキストファイルを新規作成します。

ファイルに完全制御権限を追加:

/// <summary>
  ///      users,everyone          
  /// </summary>
  /// <param name="filePath"></param>
  static void AddSecurityControll2File(string filePath)
  {

   //      
   FileInfo fileInfo = new FileInfo(filePath);
   //          
   System.Security.AccessControl.FileSecurity fileSecurity = fileInfo.GetAccessControl();
   //  ereryone                 
   fileSecurity.AddAccessRule(new FileSystemAccessRule("Everyone", FileSystemRights.FullControl, AccessControlType.Allow));
   //  Users                 
   fileSecurity.AddAccessRule(new FileSystemAccessRule("Users", FileSystemRights.FullControl, AccessControlType.Allow));
   //      
   fileInfo.SetAccessControl(fileSecurity);
  }


フォルダに完全制御権限を追加します。

/// <summary>
  ///      users,everyone          
  /// </summary>
  /// <param name="dirPath"></param>
  static void AddSecurityControll2Folder(string dirPath)
  {
   //       
   DirectoryInfo dir = new DirectoryInfo(dirPath);
   //             
   System.Security.AccessControl.DirectorySecurity dirSecurity = dir.GetAccessControl(AccessControlSections.All);
   //    ACL  
   InheritanceFlags inherits = InheritanceFlags.ContainerInherit | InheritanceFlags.ObjectInherit;
   //  ereryone                 
   FileSystemAccessRule everyoneFileSystemAccessRule = new FileSystemAccessRule("Everyone", FileSystemRights.FullControl, inherits, PropagationFlags.None, AccessControlType.Allow);
   //  Users                 
   FileSystemAccessRule usersFileSystemAccessRule = new FileSystemAccessRule("Users", FileSystemRights.FullControl, inherits, PropagationFlags.None, AccessControlType.Allow);
   bool isModified = false;
   dirSecurity.ModifyAccessRule(AccessControlModification.Add, everyoneFileSystemAccessRule, out isModified);
   dirSecurity.ModifyAccessRule(AccessControlModification.Add, usersFileSystemAccessRule, out isModified);
   //      
   dir.SetAccessControl(dirSecurity);
  }


締め括りをつける
ファイルを操作する時、やはり比較的に簡単で、しかしフォルダは比較的に複雑で、継承するかどうかの問題に影響します。
以上のC〓〓のプログラムを使ってシステムを検証してユーザーとディレクトリの権限を登録します。