C〓〓のプログラムを使ってシステムを検証してユーザーとディレクトリの権限を登録します。
Windowsユーザータイプ:Administrator、Gusest、カスタムユーザーなど。ファイルのパーミッションはRead、Write、Modify、Removeなど、すべての権限を持つ文字をフルコントロルといいます。
C〓今のプログラムのユーザーパス権限の検証
補足知識:C㌘ファイルまたはフォルダの権限を変更し、ユーザー、ユーザーグループを指定するために完全制御権限を追加します。
前に書く
windowsシステムでは、c盤のディレクトリの権限が高く、インストールパッケージを作成する場合には、デフォルトのインストールパスはc盤ですが、実行可能ファイルに対しては、完全制御権限を追加するか、読み書き権限を追加する必要があります。ここで当時の解決策を記録します。
コードの実装
Cディスクにフォルダを追加し、フォルダ内にテキストファイルを作成します。
このフォルダの下にテキストファイルを新規作成します。
ファイルに完全制御権限を追加:
フォルダに完全制御権限を追加します。
締め括りをつける
ファイルを操作する時、やはり比較的に簡単で、しかしフォルダは比較的に複雑で、継承するかどうかの問題に影響します。
以上のC〓〓のプログラムを使ってシステムを検証してユーザーとディレクトリの権限を登録します。
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〓〓のプログラムを使ってシステムを検証してユーザーとディレクトリの権限を登録します。