コード例 #1
9
ファイル: FileSystem.cs プロジェクト: Yndal/BDSA-Project-2012
        /// <summary>
        /// Initializes a new instance of the <see cref="FileSystem" /> class.
        /// </summary>
        /// <param name="root">The absolute path to the root directory of this file system (..../Pie/ or .../Pie).</param>
        public FileSystem(String root)
        {
            // Append separator to root, if it hasn't got it
            _fileSystemRoot = root + (root.EndsWith(PathSeparator) ? String.Empty : PathSeparator);

            DirectoryInfo dirInfo = new DirectoryInfo(_fileSystemRoot);

            // Create directory if it doesn't exist
            if (!Directory.Exists(_fileSystemRoot))
            {
                Directory.CreateDirectory(_fileSystemRoot);
            }

            // Make sure the directory has the right permissions
            try
            {
                // Attempt to get a list of security permissions from the folder.
                // This will raise an exception if the path is read only or do not have access to view the permissions.
                System.Security.AccessControl.DirectorySecurity ds = Directory.GetAccessControl(_fileSystemRoot);
            }
            catch (UnauthorizedAccessException)
            {
                var security = new DirectorySecurity();
                var windowsIdentity = WindowsIdentity.GetCurrent();
                if (windowsIdentity != null)
                {
                    var id = windowsIdentity.User;
                    var rule = new FileSystemAccessRule(id, FileSystemRights.FullControl, AccessControlType.Allow);
                    security.AddAccessRule(rule);
                    dirInfo.SetAccessControl(security);
                }
            }
        }
コード例 #2
1
ファイル: FolderHelper.cs プロジェクト: zhangjinde/se
        /// <summary>
        /// Make a folder if doesn't exist
        /// </summary>
        /// <param name="folderPath"></param>
        /// <returns></returns>
        public static bool MakeFolder(string folderPath)
        {
            if (!Directory.Exists(folderPath))
            {
                try
                {
                    DirectorySecurity securityRules = new DirectorySecurity();
                    securityRules.AddAccessRule(new FileSystemAccessRule("Users", FileSystemRights.FullControl,
                                                                            InheritanceFlags.ContainerInherit | InheritanceFlags.ObjectInherit,
                                                                            PropagationFlags.NoPropagateInherit,
                                                                            AccessControlType.Allow));

                    Directory.CreateDirectory(folderPath, securityRules);
                    File.SetAttributes(folderPath, FileAttributes.Normal);
                }
                catch (Exception ex)
                {
                    Console.WriteLine("Exception trying to create folder: " + folderPath);
                    if (ex.InnerException != null)
                        Console.WriteLine(ex.InnerException.Message);
                    else
                        Console.WriteLine(ex.Message);
                    return false;
                }
            }
            return true;
        }
コード例 #3
1
ファイル: Locations.cs プロジェクト: nano-byte/common
 static Locations()
 {
     if (WindowsUtils.IsWindowsNT)
     {
         _secureSharedAcl = new DirectorySecurity();
         _secureSharedAcl.SetOwner(new SecurityIdentifier(WellKnownSidType.BuiltinAdministratorsSid, null));
         _secureSharedAcl.SetAccessRuleProtection(isProtected: true, preserveInheritance: false);
         _secureSharedAcl.AddAccessRule(new FileSystemAccessRule(new SecurityIdentifier("S-1-1-0" /*Everyone*/), FileSystemRights.ReadAndExecute, InheritanceFlags.ContainerInherit | InheritanceFlags.ObjectInherit, PropagationFlags.None, AccessControlType.Allow));
         _secureSharedAcl.AddAccessRule(new FileSystemAccessRule(new SecurityIdentifier(WellKnownSidType.BuiltinUsersSid, null), FileSystemRights.ReadAndExecute, InheritanceFlags.ContainerInherit | InheritanceFlags.ObjectInherit, PropagationFlags.None, AccessControlType.Allow));
         _secureSharedAcl.AddAccessRule(new FileSystemAccessRule(new SecurityIdentifier(WellKnownSidType.BuiltinAdministratorsSid, null), FileSystemRights.FullControl, InheritanceFlags.ContainerInherit | InheritanceFlags.ObjectInherit, PropagationFlags.None, AccessControlType.Allow));
         _secureSharedAcl.AddAccessRule(new FileSystemAccessRule(new SecurityIdentifier(WellKnownSidType.LocalSystemSid, null), FileSystemRights.FullControl, InheritanceFlags.ContainerInherit | InheritanceFlags.ObjectInherit, PropagationFlags.None, AccessControlType.Allow));
     }
 }
コード例 #4
0
        static void SetAccessRule(string directory)
        {
            System.Security.AccessControl.DirectorySecurity sec = System.IO.Directory.GetAccessControl(directory);
            FileSystemAccessRule accRule = new FileSystemAccessRule(Environment.UserDomainName + "\\" + Environment.UserName, FileSystemRights.FullControl, AccessControlType.Allow);

            sec.AddAccessRule(accRule);
        }
コード例 #5
0
 public static void AddDirectorySecurity(string strPath, string Account, System.Security.AccessControl.FileSystemRights Rights, System.Security.AccessControl.AccessControlType ControlType)
 {
     System.IO.DirectoryInfo directoryInfo = new System.IO.DirectoryInfo(strPath);
     System.Security.AccessControl.DirectorySecurity accessControl = directoryInfo.GetAccessControl();
     accessControl.AddAccessRule(new System.Security.AccessControl.FileSystemAccessRule(Account, Rights, ControlType));
     directoryInfo.SetAccessControl(accessControl);
 }
コード例 #6
0
ファイル: Permissions.cs プロジェクト: hansdude/Phalanger
 /// <summary>
 /// Set required permissions to the Phalanger install folder. To enable phalanger ASP.NET app i.e. to generate/modify dynamic wrappers.
 /// </summary>
 /// <param name="folder">Phalanger install folder.</param>
 private static void SetEveryonePermission(string folder)
 {
     var everyonesid = new System.Security.Principal.SecurityIdentifier(System.Security.Principal.WellKnownSidType.WorldSid, null);
     FileSystemAccessRule everyOne = new FileSystemAccessRule(everyonesid, FileSystemRights.FullControl | FileSystemRights.Write | FileSystemRights.Read, AccessControlType.Allow);
     DirectorySecurity dirSecurity = new DirectorySecurity(folder, AccessControlSections.Group);
     dirSecurity.AddAccessRule(everyOne);
     Directory.SetAccessControl(folder, dirSecurity);
 }
コード例 #7
0
        protected override void ExecuteOnDir(DirectoryInfo dir)
        {
            DirectorySecurity dirSec = new DirectorySecurity(dir.FullName, AccessControlSections.Access);

            Log(Level.Info, Resources.AddAccessRuleAdding, Rights, NTAccount, dir.FullName);
            FileSystemAccessRule newRule = new FileSystemAccessRule(new NTAccount(NTAccount), Rights, InheritanceFlags, PropagationFlags, AccessControlType);
            dirSec.AddAccessRule(newRule);
            dir.SetAccessControl(dirSec);
        }
コード例 #8
0
    /// <summary>
    /// 给文件夹添加完全控制权限
    /// </summary>
    /// <param name="directoryPath"></param>
    public static void AddTopPermissionToDirectory(string directoryPath)
    {
        if (string.IsNullOrEmpty(directoryPath))
        {
            return;
        }
        //给文件所在目录添加"Everyone,Users"用户组的完全控制权限
        DirectoryInfo directoryInfo = new DirectoryInfo(Path.GetDirectoryName(directoryPath));

        if (directoryInfo == null)
        {
            return;
        }
        System.Security.AccessControl.DirectorySecurity dirSecurity = directoryInfo.GetAccessControl();
        dirSecurity.AddAccessRule(new FileSystemAccessRule("Everyone", FileSystemRights.FullControl, AccessControlType.Allow));
        dirSecurity.AddAccessRule(new FileSystemAccessRule("Users", FileSystemRights.FullControl, AccessControlType.Allow));
        directoryInfo.SetAccessControl(dirSecurity);
    }
コード例 #9
0
        /// <summary>
        /// 作用:文件夹授权
        /// 作者:杨洋AY
        /// 添加时间:2016-6-19
        /// </summary>
        /// <param name="DirectoryPath">需要被授权的文件夹,默认是Everyone</param>
        public virtual void AccessDirectoryRights(string DirectoryPath, string DirectoryAuth = "Everyone")
        {
            DirectoryInfo di = Directory.CreateDirectory(DirectoryPath);

            //赋予文件夹权限
            System.Security.AccessControl.DirectorySecurity dirSecurity = di.GetAccessControl();
            dirSecurity.AddAccessRule(new FileSystemAccessRule(DirectoryAuth, FileSystemRights.FullControl, InheritanceFlags.ContainerInherit | InheritanceFlags.ObjectInherit, PropagationFlags.None, AccessControlType.Allow));
            di.SetAccessControl(dirSecurity);
        }
コード例 #10
0
ファイル: DirectoryTools.cs プロジェクト: nickvetter/Chiota
        /// <summary>
        /// Add an access rule to a folder
        /// </summary>
        ///
        /// <param name="Path">Folder path</param>
        /// <param name="User">UNC path to user profile ex. Environment.UserDomainName + "\\" + Environment.UserName</param>
        /// <param name="Rights">Desired file system rights</param>
        /// <param name="Access">Desired level of access</param>
        public static void AddAccessRule(string Path, string User, FileSystemRights Rights, AccessControlType Access)
        {
            // Get a DirectorySecurity object that represents the current security settings
            System.Security.AccessControl.DirectorySecurity sec = System.IO.Directory.GetAccessControl(Path);
            // Add the FileSystemAccessRule to the security settings
            FileSystemAccessRule accRule = new FileSystemAccessRule(User, Rights, Access);

            sec.AddAccessRule(accRule);
        }
コード例 #11
0
ファイル: Form1.cs プロジェクト: Burrito119/JobTracker
 public Form1()
 {
     InitializeComponent();
     orgHieght = this.Height;
     bigHeight = this.orgHieght + this.richTextBox1.Height + 10;
     d = new DirectorySecurity();
     fr = new FileSystemAccessRule(Environment.UserName, FileSystemRights.FullControl, AccessControlType.Allow);
     d.AddAccessRule(fr);
     mainDir = Directory.CreateDirectory("c:/JTRacker", d);
 }
コード例 #12
0
ファイル: Program.cs プロジェクト: oblivious/Oblivious
        static void Main(string[] args)
        {
            DirectorySecurity ds = new DirectorySecurity();
            ds.AddAccessRule(new FileSystemAccessRule("Guest", FileSystemRights.Read, AccessControlType.Allow));
            string newFolder = System.IO.Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.Personal), "Guest");
            Directory.CreateDirectory(newFolder, ds);

            string newFile = System.IO.Path.Combine(newFolder, "Data.dat");
            File.Create(newFile);
        }
コード例 #13
0
ファイル: Helper.Win32.Unix.cs プロジェクト: kouvel/corefx
        internal static void CreateDirectory(string path, IsolatedStorageScope scope)
        {
            if (Directory.Exists(path))
                return;

            DirectoryInfo info = Directory.CreateDirectory(path);

            if (IsMachine(scope) && RuntimeInformation.IsOSPlatform(OSPlatform.Windows))
            {
                // Need to emulate COMIsolatedStorage::CreateDirectoryWithDacl(), which gives the following rights:
                //
                //  World / Everyone (S-1-1-0 / SECURITY_WORLD_RID) -> (FILE_GENERIC_WRITE | FILE_GENERIC_READ) & (~WRITE_DAC)
                //  Creator Owner (S-1-3-0 / SECURITY_CREATOR_OWNER_RID) -> FILE_ALL_ACCESS
                //  Local Admins (S-1-5-32 / SECURITY_BUILTIN_DOMAIN_RID & DOMAIN_ALIAS_RID_ADMINS) -> FILE_ALL_ACCESS
                // 
                // When looking at rights through the GUI it looks like this:
                //
                //  "Everyone" -> Read, Write
                //  "Administrators" -> Full control
                //  "CREATOR OWNER" -> Full control
                //
                // With rights applying to "This folder, subfolders, and files". No inheritance from the parent folder.
                //
                // Note that trying to reset the rules for CREATOR OWNER leaves the current directory with the actual creator's SID.
                // (But applies CREATOR OWNER as expected for items and subdirectories.) Setting up front when creating the directory
                // doesn't exhibit this behavior, but as we can't currently do that we'll take the rough equivalent for now.

                DirectorySecurity security = new DirectorySecurity();

                // Don't inherit the existing rules
                security.SetAccessRuleProtection(isProtected: true, preserveInheritance: false);
                security.AddAccessRule(new FileSystemAccessRule(
                    identity: new SecurityIdentifier(WellKnownSidType.WorldSid, null),
                    fileSystemRights: FileSystemRights.Read | FileSystemRights.Write,
                    inheritanceFlags: InheritanceFlags.ContainerInherit | InheritanceFlags.ObjectInherit,
                    propagationFlags: PropagationFlags.None,
                    type: AccessControlType.Allow));

                security.AddAccessRule(new FileSystemAccessRule(
                    identity: new SecurityIdentifier(WellKnownSidType.BuiltinAdministratorsSid, null),
                    fileSystemRights: FileSystemRights.FullControl,
                    inheritanceFlags: InheritanceFlags.ContainerInherit | InheritanceFlags.ObjectInherit,
                    propagationFlags: PropagationFlags.None,
                    type: AccessControlType.Allow));

                security.AddAccessRule(new FileSystemAccessRule(
                    identity: new SecurityIdentifier(WellKnownSidType.CreatorOwnerSid, null),
                    fileSystemRights: FileSystemRights.FullControl,
                    inheritanceFlags: InheritanceFlags.ContainerInherit | InheritanceFlags.ObjectInherit,
                    propagationFlags: PropagationFlags.None,
                    type: AccessControlType.Allow));

                info.SetAccessControl(security);
            }
        }
コード例 #14
0
        static void Main(string[] args)
        {
            DirectorySecurity ds = new DirectorySecurity();
            ds.AddAccessRule(new FileSystemAccessRule("Rafa&Pri", FileSystemRights.Read, AccessControlType.Allow));
            string newFolder = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.Personal), "Rafa&Pri");
            Directory.CreateDirectory(newFolder, ds);

            FileSecurity fs = new FileSecurity();
            fs.AddAccessRule(new FileSystemAccessRule("Rafa&Pri", FileSystemRights.FullControl, AccessControlType.Allow));
            string newFile = Path.Combine(newFolder, "Data.dat");
            File.Create(newFile, 100, FileOptions.None, fs);
        }
コード例 #15
0
        public void BreadcrumbsCreationDoesNotFailWhenAccessDenied()
        {
            var userName = System.Security.Principal.WindowsIdentity.GetCurrent().Name;

            var directory = new DirectoryInfo(TempFolderPath);
            var security = new DirectorySecurity();
            security.AddAccessRule(new FileSystemAccessRule(userName, FileSystemRights.Write, AccessControlType.Deny));
            directory.SetAccessControl(security);

            var breadcrumbs = new Servicing.Breadcrumbs(TempFolderPath);
            breadcrumbs.CreateBreadcrumb("Test", new NuGet.SemanticVersion("1.0.0"));

            Assert.Empty(Directory.GetFiles(TempFolderPath));
        }
コード例 #16
0
        static void Main()
        {
            const string dir = @"C:\test";

            if (!Directory.Exists(dir))
            {
                Directory.CreateDirectory(dir);
            }

            System.Security.AccessControl.DirectorySecurity ds = Directory.GetAccessControl(dir);
            ds.AddAccessRule(new FileSystemAccessRule("Guest", FileSystemRights.Read, AccessControlType.Allow));
            Directory.SetAccessControl(dir, ds);

            Console.WriteLine(ds.GetSecurityDescriptorSddlForm(AccessControlSections.All));
        }
コード例 #17
0
ファイル: FileUtil.cs プロジェクト: Healix/Gw2Launcher
 public static bool AllowFolderAccess(string path, FileSystemRights rights)
 {
     try
     {
         var security = new System.Security.AccessControl.DirectorySecurity();
         var usersSid = new SecurityIdentifier(WellKnownSidType.BuiltinUsersSid, null);
         security.AddAccessRule(new FileSystemAccessRule(usersSid, rights, InheritanceFlags.ContainerInherit | InheritanceFlags.ObjectInherit, PropagationFlags.None, AccessControlType.Allow));
         Directory.SetAccessControl(path, security);
         return true;
     }
     catch
     {
         return false;
     }
 }
コード例 #18
0
        public static void Upload(string valor, string servidor, string fileName, string usuario, string senha, string diretorio, IEncoding type)
        {
            if (!string.IsNullOrEmpty(diretorio))
            {
                //object SpecialFolder = Activator.CreateInstance(Type.GetType("System.Environment+SpecialFolder"));
                //SpecialFolder.GetType().GetMember("Personal").GetValue(0);

                if (diretorio.Contains(":"))
                {
                    diretorio = diretorio + "\\" + fileName;//System.IO.Path.GetFileName(servidor);
                }
                else
                {
                    diretorio = Environment.GetFolderPath(Environment.SpecialFolder.Personal) + diretorio;
                }

                string path = System.IO.Path.GetFullPath(diretorio);
                if (!System.IO.Directory.Exists(path))
                {
                    System.Security.AccessControl.DirectorySecurity sec = new System.Security.AccessControl.DirectorySecurity();
                    // Using this instead of the "Everyone" string means we work on non-English systems.
                    SecurityIdentifier everyone = new SecurityIdentifier(WellKnownSidType.WorldSid, null);
                    sec.AddAccessRule(new FileSystemAccessRule(everyone, FileSystemRights.Modify | FileSystemRights.Synchronize, InheritanceFlags.ContainerInherit | InheritanceFlags.ObjectInherit, PropagationFlags.None, AccessControlType.Allow));
                    System.IO.Directory.CreateDirectory(path, sec);
                }
                type.SaveLocal(diretorio, fileName, valor);
                //System.IO.File.WriteAllText(diretorio+"\\"+System.IO.Path.GetFileName(servidor), valor);
            }

            if (!string.IsNullOrEmpty(servidor))
            {
                //FtpWebRequest request = (FtpWebRequest)FtpWebRequest.Create(new Uri(servidor));
                //request.Method = WebRequestMethods.Ftp.UploadFile;
                //request.Credentials = new NetworkCredential(usuario, senha);
                //Stream reqStream = null;

                //reqStream = request.GetRequestStream();
                //byte[] buffer = System.Text.Encoding.UTF8.GetBytes(valor);
                //reqStream.Write(buffer, 0, buffer.Length);

                //reqStream.Close();
                type.SaveServer(servidor + "/" + fileName, usuario, senha, valor);
            }
        }
コード例 #19
0
 public static bool setAccessControl(this DirectoryInfo directoryInfo, string targetUser, FileSystemRights fileSystemRights, AccessControlType accessControlType)
 {
     if (directoryInfo.notNull() && targetUser.notNull())
     {
         try
         {
             var fileSystemAccessRule = new FileSystemAccessRule(targetUser, fileSystemRights, accessControlType);
             var directorySecurity = new DirectorySecurity();
             directorySecurity.AddAccessRule(fileSystemAccessRule);
             directoryInfo.SetAccessControl(directorySecurity);
             return true;
         }
         catch(Exception ex)
         {
             ex.log();                    
         }
     }
     return false;
 }
コード例 #20
0
        private int CreaCartella(string path)
        {
            try
            {
                DirectoryInfo dir = Directory.CreateDirectory(path);
                var nn = new FileSystemAccessRule(@"tsf\TFSSetup", FileSystemRights.FullControl, AccessControlType.Allow);
                var u = new System.Security.Principal.NTAccount("tsf", "tfssetup");
                var dirSec = new DirectorySecurity();
                dirSec.AddAccessRule(nn);
                Directory.SetAccessControl(path, dirSec);
                var user = System.IO.Directory.GetAccessControl(path).GetOwner(typeof(System.Security.Principal.NTAccount));
                return 0;
            }
            catch(Exception ex)
            {
                throw ex;
            }

        }
コード例 #21
0
        public void CopyRulesFolder(DirectoryInfo source, DirectoryInfo destination)
        {
            try
            {
                DirectorySecurity dirSource = Directory.GetAccessControl(source.FullName);
                DirectorySecurity dirDestination = Directory.GetAccessControl(destination.FullName);
                DirectorySecurity SecuritePourDestination = new DirectorySecurity();

                //J'ajoute les droits du dossier source à la sécurité du dossier destination
                AuthorizationRuleCollection autorisations;
                autorisations = dirSource.GetAccessRules(true, true, typeof(NTAccount));
                foreach (FileSystemAccessRule fsar in autorisations.OfType<FileSystemAccessRule>())
                {
                    SecuritePourDestination.AddAccessRule(new FileSystemAccessRule(fsar.IdentityReference.Value, fsar.FileSystemRights, fsar.InheritanceFlags, fsar.PropagationFlags, fsar.AccessControlType));
                }

                //Ajout des droits au dossier de destination
                Directory.SetAccessControl(destination.FullName, SecuritePourDestination);
            }
            catch (Exception)
            {
            }
        }
コード例 #22
0
ファイル: FileUtil.cs プロジェクト: navam1915/Gw2Launcher
        public static bool AllowFolderAccess(string path, FileSystemRights rights)
        {
            try
            {
                var security    = Directory.GetAccessControl(path, AccessControlSections.Access);
                var usersSid    = new SecurityIdentifier(WellKnownSidType.BuiltinUsersSid, null);
                var rules       = security.GetAccessRules(true, false, typeof(SecurityIdentifier));
                var inheritance = InheritanceFlags.ContainerInherit | InheritanceFlags.ObjectInherit;

                foreach (FileSystemAccessRule rule in rules)
                {
                    if (rule.IdentityReference == usersSid)
                    {
                        if (rule.AccessControlType == AccessControlType.Allow)
                        {
                            if ((rule.FileSystemRights & rights) == rights && (rule.InheritanceFlags & inheritance) == inheritance)
                            {
                                return(true);
                            }
                            rights |= rule.FileSystemRights;
                        }
                        break;
                    }
                }

                security = new System.Security.AccessControl.DirectorySecurity();
                security.AddAccessRule(new FileSystemAccessRule(usersSid, rights, inheritance, PropagationFlags.None, AccessControlType.Allow));
                Directory.SetAccessControl(path, security);

                return(true);
            }
            catch (Exception e)
            {
                Util.Logging.Log(e);
                return(false);
            }
        }
コード例 #23
0
ファイル: DirSecurity.cs プロジェクト: jesszgc/VideoConvert
        public static DirectorySecurity CreateDirSecurity(SecurityClass securityClass)
        {
            DirectorySecurity security = new DirectorySecurity();

            WindowsIdentity windowsIdentity = WindowsIdentity.GetCurrent();
            if (windowsIdentity != null)
            {
                SecurityIdentifier identity = windowsIdentity.User;
                if (identity != null)
                {
                    security.SetOwner(identity);
                    FileSystemAccessRule accessRule = new FileSystemAccessRule(identity,
                                                              FileSystemRights.FullControl,
                                                              InheritanceFlags.ObjectInherit |
                                                              InheritanceFlags.ContainerInherit,
                                                              PropagationFlags.None,
                                                              AccessControlType.Allow);
                    security.SetAccessRule(accessRule);
                }
            }

            if (securityClass == SecurityClass.Everybody)
            {
                SecurityIdentifier everybodyIdentity = new SecurityIdentifier(WellKnownSidType.WorldSid, null);

                FileSystemAccessRule accessRule = new FileSystemAccessRule(everybodyIdentity,
                                                          FileSystemRights.FullControl,
                                                          InheritanceFlags.ObjectInherit |
                                                          InheritanceFlags.ContainerInherit,
                                                          PropagationFlags.None,
                                                          AccessControlType.Allow);
                security.AddAccessRule(accessRule);
            }

            return security;
        }
コード例 #24
0
        private void GrantAccess()
        {
            try
            {
                var dSecurity = new DirectorySecurity();
                dSecurity.AddAccessRule(new FileSystemAccessRule(new SecurityIdentifier(WellKnownSidType.WorldSid, null), FileSystemRights.Modify | FileSystemRights.Synchronize,
                                                                          InheritanceFlags.ContainerInherit | InheritanceFlags.ObjectInherit,
                                                                          PropagationFlags.None, AccessControlType.Allow));
                dSecurity.SetAccessRuleProtection(false, true);
                Directory.CreateDirectory(_settingsPath, dSecurity);
            }
            catch (Exception e)
            {

                throw new Exception("Unable to GrantAccess()" + e);
            }
        }
コード例 #25
0
		private void butOK_Click(object sender, System.EventArgs e) {
			if(!Directory.Exists(textLocation.Text)){
				MsgBox.Show(this,"Location does not exist.");
				return;
			}
			if(Directory.Exists(ODFileUtils.CombinePaths(textLocation.Text,textName.Text))) {
				MsgBox.Show(this,"Folder already exists.");
				return;
			}
			try {
				FileSystemAccessRule fsar=new FileSystemAccessRule("everyone",FileSystemRights.FullControl,AccessControlType.Allow);
				DirectorySecurity ds=new DirectorySecurity();
				ds.AddAccessRule(fsar);
				string requestDir=textLocation.Text;
				string rootFolderName=textName.Text;
				string rootDir=ODFileUtils.CombinePaths(requestDir,rootFolderName);
				//Enable file sharing for the A to Z folder.
				if(Environment.OSVersion.Platform==PlatformID.Unix) {
					//Process.Start("net","usershare add OpenDentImages \""+rootDir+"\"");//for future use.
				}
				else {//Windows
					Process.Start("NET","SHARE OpenDentImages=\""+rootDir+"\"");
				}
				//All folder names to be created should be put in this list, so that each folder is created exactly
				//the same way.
				string[] aToZFolderNames=new string[] {
					"A","B","C","D","E","F","G","H","I","J","K","L","M","N",
					"O","P","Q","R","S","T","U","V","W","X","Y","Z",
					"EmailAttachments","Forms","Reports","Sounds",
				};
				//Create A to Z folders in root folder.
				for(int i=0;i<aToZFolderNames.Length;i++) {
					string pathToCreate=ODFileUtils.CombinePaths(rootDir,aToZFolderNames[i]);
					if(!Directory.Exists(pathToCreate)) {
						// Mono does support Directory.CreateDirectory(string, DirectorySecurity)
#if !LINUX
						Directory.CreateDirectory(pathToCreate,ds);
#else
						Directory.CreateDirectory(pathToCreate);
#endif
					}
				}
				//Save new image path into the DocPath and 
				//set "use A to Z folders" check-box to checked.
				Prefs.UpdateString(PrefName.DocPath,rootDir);
				Prefs.UpdateString(PrefName.AtoZfolderUsed,"1");
				Cache.Refresh(InvalidType.Prefs);
				//Prefs_client.RefreshClient();
			}
			catch(Exception ex) {
				Logger.openlog.LogMB("Failed to create A to Z folders: "+ex.ToString(),Logger.Severity.ERROR);
			}
			DialogResult=DialogResult.OK;
		}
コード例 #26
0
ファイル: Program.cs プロジェクト: Kusado/WindowsProjects
        private static void SetAcl(string path, SearchResult user, FileSystemRights right)
        {
            var userId = user.Properties["userPrincipalName"][0].ToString();
            var fullUserName = user.Properties["name"][0].ToString();
            var fullPath = path + fullUserName;
            var dir = new DirectoryInfo(fullPath);
            var ds = new DirectorySecurity();
            ds.SetAccessRuleProtection(true, false);

            var uacl = new FileSystemAccessRule(userId,
                right,
                InheritanceFlags.ContainerInherit | InheritanceFlags.ObjectInherit,
                PropagationFlags.None,
                AccessControlType.Allow);
            ds.AddAccessRule(uacl);

            var domainAdmins = new SecurityIdentifier(WellKnownSidType.AccountDomainAdminsSid, AppSettings.GeneralSettings.DomainSid);
            var pacl = new FileSystemAccessRule(domainAdmins,
                FileSystemRights.FullControl,
                InheritanceFlags.ContainerInherit | InheritanceFlags.ObjectInherit,
                PropagationFlags.None,
                AccessControlType.Allow);
            ds.AddAccessRule(pacl);

            var system = new SecurityIdentifier(WellKnownSidType.LocalSystemSid, null);
            var sacl = new FileSystemAccessRule(system,
                FileSystemRights.FullControl,
                InheritanceFlags.ContainerInherit | InheritanceFlags.ObjectInherit,
                PropagationFlags.None,
                AccessControlType.Allow);
            ds.AddAccessRule(sacl);

            dir.SetAccessControl(ds);
        }
コード例 #27
0
ファイル: IOMiscUtils.cs プロジェクト: itadapter/nfx
        /// <summary>
        /// Creates directory and immediately grants it accessibility rules for everyone if it does not exists,
        ///  or returns the existing directory
        /// </summary>
        public static DirectoryInfo EnsureAccessibleDirectory(string path)
        {
            FileSystemAccessRule ausersRule = new FileSystemAccessRule(
                      "Authenticated Users",
                      FileSystemRights.FullControl,
                      InheritanceFlags.ContainerInherit | InheritanceFlags.ObjectInherit,
                      PropagationFlags.None,
                      AccessControlType.Allow);

              FileSystemAccessRule usersRule = new FileSystemAccessRule(
                      "Users",
                      FileSystemRights.FullControl,
                      InheritanceFlags.ContainerInherit | InheritanceFlags.ObjectInherit,
                      PropagationFlags.None,
                      AccessControlType.Allow);

              FileSystemAccessRule adminsRule = new FileSystemAccessRule(
                      "Administrators",
                      FileSystemRights.FullControl,
                      InheritanceFlags.ContainerInherit | InheritanceFlags.ObjectInherit,
                      PropagationFlags.None,
                      AccessControlType.Allow);

              FileSystemAccessRule sysRule = new FileSystemAccessRule(
                     "SYSTEM",
                     FileSystemRights.FullControl,
                     InheritanceFlags.ContainerInherit | InheritanceFlags.ObjectInherit,
                     PropagationFlags.None,
                     AccessControlType.Allow);

              DirectorySecurity dirSec = new DirectorySecurity();
              dirSec.AddAccessRule(ausersRule);
              dirSec.AddAccessRule(usersRule);
              dirSec.AddAccessRule(adminsRule);
              dirSec.AddAccessRule(sysRule);

              return Directory.CreateDirectory(path, dirSec);
        }
コード例 #28
0
        /// <summary>
        /// Create a directory with the specified user access
        /// </summary>
        public virtual void CreateDirectory(string path, IEnumerable<UserAccess> userAccess)
        {
            IEnumerable<FileSystemAccessRule> rules = userAccess.SelectMany(ua => GetAccessControlRules(ua.Access, ua.UserName));

            DirectorySecurity security = new DirectorySecurity();
            foreach (FileSystemAccessRule rule in rules)
            {
                security.AddAccessRule(rule);
            }

            fileSystem.CreateDirectory(path, security);
        }
コード例 #29
0
ファイル: form.cs プロジェクト: xbojer/devel_vm
        private void checkSourceDir()
        {
            string dir = @"C:\DEVEL";
            string shareName = "DEVEL";
            log("Verifying directory [" + dir + "]...");
            if (!Directory.Exists(dir))
            {
                log("Creating directory [" + dir + "]...");
                try
                {
                    DirectorySecurity sec = new DirectorySecurity(Environment.GetFolderPath(Environment.SpecialFolder.Personal), AccessControlSections.All);
                    sec.AddAccessRule(new FileSystemAccessRule(
                        "vbox",
                        FileSystemRights.FullControl,
                        InheritanceFlags.ContainerInherit | InheritanceFlags.ObjectInherit,
                        PropagationFlags.InheritOnly,
                        AccessControlType.Allow
                    ));
                    Directory.CreateDirectory(dir, sec);
                }
                catch (Exception)
                {
                    try
                    {
                        log("Retry Creating directory [" + dir + "]...");
                        Directory.CreateDirectory(dir);
                    }
                    catch (Exception)
                    {
                        log("Unable to create " + dir + " :(");
                        MessageBox.Show("Unable to create " + dir + " ! Exterminate!", "Devel VM Installer Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
                        Program.Exterminate();
                    }
                }

            }

            log("Verifying share [" + shareName + "]...");
            Win32Share oldshare = Win32Share.GetNamedShare(shareName);
            if (oldshare != null)
            {
                if (oldshare.Path.ToLower() != dir.ToLower())
                {
                    log("Share incorrect! Fixing...");
                    oldshare.Delete();
                }
                else
                {
                    return;
                }
            }
            else
            {
                log("Share not found! Creating...");
            }
            string debug = Program.execute("net", "share " + shareName + "=" + dir + " /GRANT:vbox,FULL");
            oldshare = Win32Share.GetNamedShare(shareName);
            if (oldshare == null)
            {
                log("Could not share directory " + debug);
                MessageBox.Show("Could not share [" + dir + "] directory! Exterminate!", "Devel VM Installer Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
                Program.Exterminate();
            }
            /*Win32Share.MethodStatus createResult = Win32Share.Create(dir, shareName, Win32Share.ShareType.DiskDrive, 20, "Source code", null);
            if (createResult != Win32Share.MethodStatus.Success){}*/
        }
コード例 #30
0
 private static string CreateMsBuildTargetDirectory()
 {
     var msBuildVersion = MsBuildVersion.GetMsBuildVersion(_vsVersion);
     var directoryToCreate = Path.Combine(Locations.MsBuildPath, msBuildVersion);
     Log.Write("MsBuild Directory being created {0}", directoryToCreate);
     if (!Directory.Exists(directoryToCreate))
     {
         try
         {
             var sec = new DirectorySecurity();
             // Using this instead of the "Everyone" string means we work on non-English systems.
             var everyone = new SecurityIdentifier(WellKnownSidType.WorldSid, null);
             sec.AddAccessRule(new FileSystemAccessRule(everyone, FileSystemRights.Modify | FileSystemRights.Synchronize, InheritanceFlags.ContainerInherit | InheritanceFlags.ObjectInherit, PropagationFlags.None, AccessControlType.Allow));
             Directory.CreateDirectory(directoryToCreate, sec);
             return directoryToCreate;
         }
         catch (Exception exception)
         {
             Log.Write(exception);
             Log.Write("Error creating MSBuild Path folder in {0}", Locations.MsBuildPath);
             throw;
         }
     }
     Log.Write("MSBuild Path {0} already exists", directoryToCreate);
     return directoryToCreate;
 }
コード例 #31
0
        public void SetAccessControl_CallsApiCorrectly()
        {
            var supportsPatternSearch = bool.Parse((string)TestContext.DataRow["SupportsPatternSearch"]);

            var fixture = DokanOperationsFixture.Instance;

            string path = fixture.DirectoryName;
            var security = new DirectorySecurity();
            security.AddAccessRule(new FileSystemAccessRule(new SecurityIdentifier(WellKnownSidType.BuiltinUsersSid, null), FileSystemRights.FullControl, InheritanceFlags.ContainerInherit | InheritanceFlags.ObjectInherit, PropagationFlags.NoPropagateInherit, AccessControlType.Allow));
#if LOGONLY
            fixture.SetupAny();
#else
            fixture.ExpectCreateFile(path.AsRootedPath(), ChangePermissionsAccess, ReadWriteShare, FileMode.Open);
            fixture.ExpectGetFileInformation(path.AsRootedPath(), FileAttributes.Directory);
            fixture.ExpectGetFileSecurity(path.AsRootedPath(), DokanOperationsFixture.DefaultDirectorySecurity);
            fixture.ExpectOpenDirectory(path.AsRootedPath(), share: FileShare.ReadWrite);
            if (supportsPatternSearch)
            {
                fixture.ExpectFindFilesWithPattern(path.AsRootedPath(), "*", Array.Empty<FileInformation>());
            }
            else
            {
                fixture.ExpectFindFilesWithPatternToFail(path.AsRootedPath(), "*", DokanResult.NotImplemented);
                fixture.ExpectFindFiles(path.AsRootedPath(), Array.Empty<FileInformation>());
            }
            fixture.ExpectSetFileSecurity(path.AsRootedPath(), security);
            fixture.ExpectCreateFile(DokanOperationsFixture.RootName, ReadPermissionsAccess, ReadWriteShare, FileMode.Open);
            fixture.ExpectGetFileInformation(DokanOperationsFixture.RootName, FileAttributes.Directory);
            fixture.ExpectGetFileSecurity(DokanOperationsFixture.RootName, DokanOperationsFixture.DefaultDirectorySecurity, AccessControlSections.Access);
#endif

            var sut = new DirectoryInfo(path.AsDriveBasedPath());
            sut.SetAccessControl(security);

#if !LOGONLY
            fixture.Verify();
#endif
        }
コード例 #32
0
        /// <summary>
        /// Deploys the dynamically generated linqscript.
        /// </summary>
        /// <param name="message">The message.</param>
        internal void DeployLinqScript(Message message)
        {
            try
            {
                Log.Write("Entered in DeployLinqScript");
                // Log.Write("Message: {0}", message);

                var dstScriptPath = Path.Combine(MyDocuments, Resources.LINQPadQuery);
                Log.Write("dstScriptPath: {0}", dstScriptPath);

                if (!FileSystem.Directory.Exists(dstScriptPath))
                {
                    var sec = new DirectorySecurity();
                    // Using this instead of the "Everyone" string means we work on non-English systems.
                    var everyone = new SecurityIdentifier(WellKnownSidType.WorldSid, null);
                    sec.AddAccessRule(new FileSystemAccessRule(everyone, FileSystemRights.Modify | FileSystemRights.Synchronize, InheritanceFlags.ContainerInherit | InheritanceFlags.ObjectInherit, PropagationFlags.None, AccessControlType.Allow));
                    FileSystem.Directory.CreateDirectory(dstScriptPath, sec);
                    Log.Write(string.Format("Directory Created: {0}", dstScriptPath));
                }

                var dst = Path.Combine(dstScriptPath, string.Format(message.FileName, message.TypeFullName));
                Log.Write("dst: {0}", dst);

                var refAssemblies = new List<string>();

                refAssemblies.AddRange(message.ReferencedAssemblies);

                var linqQuery = new Inspection(refAssemblies, message.TypeFullName, message.TypeNamespace, message.TypeName);
                var linqQueryText = linqQuery.TransformText();

                Log.Write("LinqQuery file Transformed");


                using (var memoryStream = FileSystem.File.Open(dst, FileMode.Create))
                using (var streamWriter = new StreamWriter(memoryStream))
                {
                    streamWriter.Write(linqQueryText);
                    streamWriter.Flush();
                    memoryStream.Flush();
                }
                Log.Write("LinqQuery file Generated");

            }
            catch (Exception e)
            {
                Log.Write(e, "DynamicDebuggerVisualizer.DeployLinqScript");
                throw;
            }
        }
コード例 #33
0
ファイル: ACL.cs プロジェクト: wykoooo/copy-dotnet-library
 /// <summary>
 /// ���һ���û�����Ȩ�޵�Ŀ¼
 /// </summary>
 /// <param name="ds">Ŀ¼��ȫ����</param>
 /// <param name="identity">�û���ʶ</param>
 /// <param name="rights">Ȩ��</param>
 /// <param name="Inhert">�Ƿ�Ӧ�õ��Ӷ���</param>
 /// <returns></returns>
 public static DirectorySecurity AddAccessRule(DirectorySecurity ds, string identity, FileSystemRights rights, bool Inhert)
 {
     ds.AddAccessRule(new FileSystemAccessRule(identity, rights, InheritanceFlags.ContainerInherit, PropagationFlags.None, AccessControlType.Allow));
     if (Inhert) ds.AddAccessRule(new FileSystemAccessRule(identity, rights, InheritanceFlags.ObjectInherit, PropagationFlags.None, AccessControlType.Allow));
     return ds;
 }
コード例 #34
0
ファイル: DirectoryInfoTest.cs プロジェクト: aegif/CmisDrive
        public void SetAccessControl_CallsApiCorrectly()
        {
            var fixture = DokanOperationsFixture.Instance;

            string path = DokanOperationsFixture.DirectoryName;
            var security = new DirectorySecurity();
            security.AddAccessRule(new FileSystemAccessRule(new SecurityIdentifier(WellKnownSidType.BuiltinUsersSid, null), FileSystemRights.FullControl, InheritanceFlags.ContainerInherit | InheritanceFlags.ObjectInherit, PropagationFlags.NoPropagateInherit, AccessControlType.Allow));
#if LOGONLY
            fixture.SetupAny();
#else
            fixture.SetupCreateFile(path.AsRootedPath(), ChangePermissionsAccess, ReadWriteShare, FileMode.Open);
            fixture.SetupGetFileInformation(path.AsRootedPath(), FileAttributes.Directory);
            fixture.SetupGetFileSecurity(path.AsRootedPath(), DokanOperationsFixture.DefaultDirectorySecurity);
            fixture.SetupOpenDirectory(path.AsRootedPath());
            fixture.SetupSetFileSecurity(path.AsRootedPath(), security);
            fixture.SetupCreateFile(DokanOperationsFixture.RootName, ReadPermissionsAccess, ReadWriteShare, FileMode.Open);
            fixture.SetupGetFileInformation(DokanOperationsFixture.RootName, FileAttributes.Directory);
            fixture.SetupGetFileSecurity(DokanOperationsFixture.RootName, DokanOperationsFixture.DefaultDirectorySecurity, AccessControlSections.Access);
#endif

            var sut = new DirectoryInfo(path.AsDriveBasedPath());
            sut.SetAccessControl(security);

#if !LOGONLY
            fixture.VerifyAll();
#endif
        }
コード例 #35
0
        private void hide_Click(object sender, EventArgs e)
        {
            Thread hideThread = new Thread((ThreadStart)(delegate()
            {
                string targetFolder = ".\\" + textBox1.Text;
                string desktoppath = targetFolder + "\\" + "desktop.ini";
                string wzh = @".\回收站.{645ff040-5081-101b-9f08-00aa002f954e}";
                string user = "******";
                string pw = targetFolder + "\\" + "astSetting.ini";
                if (textBox1.Text == "")
                {
                    MessageBox.Show("你貌似忘了戴套了?", "出错!");
                }
                else if (Directory.Exists(wzh))
                {
                    MessageBox.Show("此目录下已存在隐藏文件夹!", "警告!");
                }
                else if (Directory.Exists(targetFolder))
                {
                    label1.Text = "程序执行中,请稍后......\r\n执行过程中请不要操作本程序以及强制停止本程序!\r\n花费的时间和文件数量成正比,零散文件越多,花费时间将会越长。";
                    var key = "=9bn&2g=4By3^GrCsP;oVQat/*6o%l#R"; //定义使用的密匙
                    var jmh = Encrypt(key, textBox1.Text);        //加密textBox1的文本
                    if (File.Exists(pw))
                    {
                        File.Delete(pw);
                    }
                    if (File.Exists(desktoppath))
                    {
                        File.Delete(desktoppath);
                    }
                    try
                    {
                        //写入desktop.ini文件
                        StreamWriter desktop = new StreamWriter(desktoppath, false, Encoding.Default);
                        desktop.WriteLine("[.ShellClassInfo]");
                        desktop.WriteLine("CLSID={645FF040-5081-101B-9F08-00AA002F954E}");
                        desktop.WriteLine("LocalizedResourceName=@%SystemRoot%\\system32\\shell32.dll,-8964");
                        desktop.Close();
                        //写入程序配置astSetting.ini文件
                        StreamWriter spw = new StreamWriter(pw, false, Encoding.UTF8);
                        spw.WriteLine(jmh);
                        spw.Close();
                        //设置文件夹所有者
                        DirectoryInfo ad = new DirectoryInfo(targetFolder);
                        DirectorySecurity adm = ad.GetAccessControl();
                        NTAccount admin = new NTAccount("Administrators");    //管理员组
                        adm.SetOwner(admin);
                        //<--设置文件夹权限
                        System.Security.AccessControl.DirectorySecurity tf;
                        tf = new System.Security.AccessControl.DirectorySecurity();
                        tf.AddAccessRule(new FileSystemAccessRule(user, FileSystemRights.Read, AccessControlType.Deny));
                        System.IO.Directory.SetAccessControl(targetFolder, tf);
                        //设置权限是为了防止被第三方文件浏览器查看到-->
                        DirectoryInfo wz = new DirectoryInfo(targetFolder);
                        wz.MoveTo(wzh);                                                            //重命名文件夹以伪装成回收站
                        File.SetAttributes(wzh, FileAttributes.System | FileAttributes.Hidden);    //隐藏为受保护的系统文件
                        x = 1;
                    }
                    catch
                    {
                        if (Directory.Exists(targetFolder))
                        {
                            File.SetAttributes(targetFolder, FileAttributes.Normal);        //恢复文件夹访问权限
                            System.Security.AccessControl.DirectorySecurity tf;
                            tf = new System.Security.AccessControl.DirectorySecurity();
                            tf.RemoveAccessRule(new FileSystemAccessRule(user, FileSystemRights.Read, AccessControlType.Deny));
                            System.IO.Directory.SetAccessControl(targetFolder, tf);
                        }
                        MessageBox.Show("出现几率极低的未知错误,未能完美执行!程序将自动执行回滚操作。", "注意!");
                        label1.Text = "操作错误,失败!";
                    }
                    if (x == 1)
                    {
                        MessageBox.Show("操作成功!", "恭喜!");
                        label1.Text = "注意:\r\n本工具采用的是“密码=文件夹名”的方式,建议文件夹名包含数字、符号或字母。";
                    }
                    else
                    {
                        if (File.Exists(pw))
                        {
                            File.Delete(pw);
                        }
                        if (File.Exists(desktoppath))
                        {
                            File.Delete(desktoppath);
                        }
                        MessageBox.Show("操作失败!\n请确定你是该文件夹的所有者,你拥有足够的权限且此文件夹没有被其他进程占用!", "失败了!");
                        label1.Text = "一般情况下本程序都能够完美成功执行任务,只有极少数特殊情况下才会失败。";
                    }
                }
                else
                {
                    MessageBox.Show("文件夹不存在!", "文件夹名错误!");
                }
            }));

            hideThread.Start();
        }
コード例 #36
0
 private static DirectorySecurity GetDirectorySecurity()
 {
     DirectorySecurity directorySecurity = new DirectorySecurity();
       directorySecurity.SetAccessRuleProtection(true, false);
       using (WindowsIdentity current = WindowsIdentity.GetCurrent())
       {
     directorySecurity.SetOwner((IdentityReference) current.User);
     for (int index = 0; index < TemporaryDataStorage.DirectoryAccessRules.Length; ++index)
       directorySecurity.AddAccessRule(TemporaryDataStorage.DirectoryAccessRules[index]);
     if (!current.User.IsWellKnown(WellKnownSidType.LocalSystemSid) && !current.User.IsWellKnown(WellKnownSidType.NetworkServiceSid) && !current.User.IsWellKnown(WellKnownSidType.LocalServiceSid))
       directorySecurity.AddAccessRule(new FileSystemAccessRule((IdentityReference) current.User, FileSystemRights.FullControl, InheritanceFlags.ContainerInherit | InheritanceFlags.ObjectInherit, PropagationFlags.None, AccessControlType.Allow));
     return directorySecurity;
       }
 }
コード例 #37
0
ファイル: Log.cs プロジェクト: nbasakuragi/Grapple
        private static void InternalWrite(string msg, params object[] args)
        {
            if (!Directory.Exists(_logsDir))
            {
                try
                {
                    var sec = new DirectorySecurity();
                    // Using this instead of the "Everyone" string means we work on non-English systems.
                    var everyone = new SecurityIdentifier(WellKnownSidType.WorldSid, null);
                    sec.AddAccessRule(new FileSystemAccessRule(everyone, FileSystemRights.Modify | FileSystemRights.Synchronize, InheritanceFlags.ContainerInherit | InheritanceFlags.ObjectInherit, PropagationFlags.None, AccessControlType.Allow));
                    Directory.CreateDirectory(_logsDir, sec);
                }
                catch
                {
                    return;
                }
            }

            if (args != null && args.Length > 0)
                msg = string.Format(CultureInfo.InvariantCulture, msg, args);

            File.AppendAllText(_logTxtFilePath, string.Concat(new[]
                {

                    DateTime.Now.ToString("o"),
                    " ",
                    msg.Trim(),
                    "\r\n\r\n"
                }));
        }
コード例 #38
0
ファイル: HostedAppxTest.cs プロジェクト: dsgouda/buildtools
        public void Setup()
        {
            tempDir = InstallLocation;
            if (!Directory.Exists(tempDir))
            {
                DirectorySecurity securityRules = new DirectorySecurity();
                securityRules.AddAccessRule(new FileSystemAccessRule("Users", FileSystemRights.FullControl, AccessControlType.Allow));

                DirectoryInfo di = Directory.CreateDirectory(tempDir, securityRules);
                Console.WriteLine("Creating directory:" + tempDir);
            }
            object appxFactoryRet;
            NativeMethods.CoCreateInstance(Guids.AppxFactory, null, NativeMethods.CLSCTX_INPROC_SERVER, Guids.IAppxFactory, out appxFactoryRet);
            var appxFactory = (IAppxFactory)appxFactoryRet;
            uint hr;
            var appx = project.Assemblies.SingleOrDefault(a => a.AssemblyFilename.ToLowerInvariant().EndsWith("appx"));
            if (appx != null)
            {
                Console.WriteLine("AppX mode");
                IStream inputStream = null;
                NativeMethods.SHCreateStreamOnFileEx(appx.AssemblyFilename, STGM_CONSTANTS.STGM_READ | STGM_CONSTANTS.STGM_SHARE_EXCLUSIVE, 0, false, null, ref inputStream);
                IAppxPackageReader packageReader;
                appxFactory.CreatePackageReader(inputStream, out packageReader);
                var appxFile = GetManifestInfoFromPackage(appxFactory, packageReader);
                ExtractFile(tempDir, appxFile);
                manifestPath = Path.Combine(tempDir, appxFile.GetName());
                var appxFilesEnumerator = packageReader.GetPayloadFiles();
                var payloadFiles = new List<string>();
                while (appxFilesEnumerator.GetHasCurrent())
                {
                    IAppxFile payloadFile;
                    hr = appxFilesEnumerator.GetCurrent(out payloadFile);
                    ThrowIfFailed(hr);
                    ExtractFile(tempDir, payloadFile);
                    appxFilesEnumerator.MoveNext();
                    var name = payloadFile.GetName();
                    if (name.ToLowerInvariant().EndsWith(".dll") || name.ToLowerInvariant().EndsWith(".exe") && name == Path.GetFileName(name))
                    {
                        payloadFiles.Add(name);
                    }
                }
                argsToPass = string.Join("\x1F", originalArgs.Where(s => !s.ToLowerInvariant().EndsWith(".appx")).Concat(payloadFiles).ToArray());
                CopyXunitDlls(this.runnerAppxPath, this.tempDir);
            }
            else
            {
                Console.WriteLine("DLL mode");
                if (File.Exists("XunitUwpRunner.exe"))
                {
                    tempDir = Directory.GetCurrentDirectory();
                    InstallLocation = tempDir;
                    Console.WriteLine("Runner EXE exists, using this directory: " + tempDir);
                    if (PackageSourceDirectory != null)
                    {
                        Console.WriteLine("Looking for *.dll in {0}", PackageSourceDirectory);
                        foreach (var f in Directory.EnumerateFiles(tempDir, "*.dll", SearchOption.TopDirectoryOnly))
                        {
                            var src = Path.Combine(PackageSourceDirectory, Path.GetFileNameWithoutExtension(f));
                            src = Path.Combine(src, Directory.EnumerateDirectories(src).First(), f);
                            var dest = Path.Combine(tempDir, Path.GetFileName(f));
                            if (File.Exists(src))
                            {
                                Console.WriteLine("Copying {0} to {1}", src, dest);
                                File.Copy(src, dest, true);
                            }
                        }
                    }
                }
                else
                {
                    Console.WriteLine("Using temp dir: " + tempDir);
                    RecurseCopy(Path.Combine(Directory.GetCurrentDirectory(), "app"), Path.GetFullPath(tempDir));

                    Console.WriteLine("Install Location: " + tempDir);
                    foreach (var a in project.Assemblies)
                    {
                        Console.WriteLine("Assembly to be tested: " + a.AssemblyFilename);
                        File.Copy(a.AssemblyFilename, Path.Combine(tempDir, Path.GetFileName(a.AssemblyFilename)), true);
                    }
                }
                argsToPass = string.Join("\x1F", originalArgs);
                Console.WriteLine("Arguments passed: " + argsToPass);
            }
            manifestPath = Path.Combine(tempDir, "AppxManifest.xml");
            Console.WriteLine("Using manifest path: " + manifestPath);
            SetupManifestForXunit(manifestPath);
            GetManifestInfoFromFile(appxFactory, manifestPath);
            Console.WriteLine("Registering: " + manifestPath);
            RegisterAppx(new Uri(manifestPath));
        }
コード例 #39
0
 public static void SetFolderRights(string FolderPath)
 {
     var security = new DirectorySecurity();
     security.AddAccessRule(new FileSystemAccessRule("IIS_IUSRS", FileSystemRights.FullControl, InheritanceFlags.ContainerInherit | InheritanceFlags.ObjectInherit, PropagationFlags.None, AccessControlType.Allow));
     Directory.SetAccessControl(FolderPath, security);
 }
コード例 #40
0
        void Next()
        {
            try
            {
                if (!Directory.Exists(FolderPath))
                {
                    Messenger.Default.Send(new SeetingView_ShowMsgEventArgs()
                    {
                        Msg = "不存在该路径!"
                    });
                    return;
                }
                if (!Directory.Exists(FolderPath + "\\" + Default.TempPDFFolder))
                {
                    Directory.CreateDirectory(FolderPath + "\\" + Default.TempPDFFolder);
                }

                DirectoryInfo di = new DirectoryInfo(FolderPath + "\\" + Default.TempPDFFolder);
                System.Security.AccessControl.DirectorySecurity dirSecurity = di.GetAccessControl();
                dirSecurity.AddAccessRule(new FileSystemAccessRule("Everyone", FileSystemRights.FullControl, AccessControlType.Allow));
                dirSecurity.AddAccessRule(new FileSystemAccessRule("Users", FileSystemRights.FullControl, AccessControlType.Allow));
                di.SetAccessControl(dirSecurity);



                switch (SelectedPrintPdfType)
                {
                case PrintPdfType.SumatraPDF:
                    SimpleIoc.Default.Register <IPrintPDF, SumatraPDFPrintPDF>(true);
                    break;

                case PrintPdfType.Aspose_PDF:
                    SimpleIoc.Default.Register <IPrintPDF, Aspose_PDF_PrintPDF>(true);
                    break;

                default:
                    break;
                }
                switch (SelectedPrintExcelType)
                {
                case  PrintExcelType.Aspose:
                    SimpleIoc.Default.Register <IPrintExcel, AsposePrintExcel>(true);
                    break;

                case PrintExcelType.Spire_XLS_PrintExcel:
                    SimpleIoc.Default.Register <IPrintExcel, Spire_XLS_PrintExcel>(true);
                    break;

                default:
                    break;
                }
                switch (SelectedExeclToPdfType)
                {
                case ExeclToPdfType.Aspose:
                    SimpleIoc.Default.Register <IExcelToPDF, AsposeE2P>(true);
                    break;

                case ExeclToPdfType.Office:
                    SimpleIoc.Default.Register <IExcelToPDF, OfficeE2P>(true);
                    break;

                case ExeclToPdfType.Spire_XLS:
                    SimpleIoc.Default.Register <IExcelToPDF, Spire_XLS_E2P>(true);
                    break;

                default:
                    break;
                }
                MainWindow v = new MainWindow();
                Messenger.Default.Send <SettingView_HideEventArgs>(new SettingView_HideEventArgs());
                v.ShowDialog();
                ViewModelLocator.CleanIOC();
                Messenger.Default.Send <SettingView_ShowFromHideEventArgs>(new SettingView_ShowFromHideEventArgs());
            }
            catch (Exception ex)
            {
                MyLogger.LoggerInstance.Error(ex);
            }
            finally
            {
                if (Directory.Exists(FolderPath + "\\" + Default.TempPDFFolder))
                {
                    Directory.Delete(FolderPath + "\\" + Default.TempPDFFolder);
                }
            }
        }