using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Configuration.Install;
using System.IO;
using System.Security.AccessControl;
namespace NameSpace
{
[RunInstaller(true)]
public partial class CreateDir : Installer
{
public CreateDir()
{
InitializeComponent();
}
public override void Install(System.Collections.IDictionary stateSaver)
{
CreateDirectory(Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.CommonApplicationData), @"Company"));
CreateDirectory(Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.CommonApplicationData), @"Company\Product"));
base.Install(stateSaver);
}
public override void Uninstall(System.Collections.IDictionary savedState)
{
DeleteDirectory(Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.CommonApplicationData), @"Company\Product"), true);
DeleteDirectory(Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.CommonApplicationData), @"Company"), false);
base.Uninstall(savedState);
}
public override void Rollback(System.Collections.IDictionary savedState)
{
DeleteDirectory(Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.CommonApplicationData), @"Company\Product"), true);
DeleteDirectory(Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.CommonApplicationData), @"Company"), false);
base.Rollback(savedState);
}
private void CreateDirectory(string dirPath)
{
DirectoryInfo dirInfo = new DirectoryInfo(dirPath);
FileSystemAccessRule rule = new FileSystemAccessRule("Everyone", FileSystemRights.FullControl, InheritanceFlags.ContainerInherit | InheritanceFlags.ObjectInherit, PropagationFlags.None, AccessControlType.Allow);
if (!dirInfo.Exists)
{
DirectorySecurity security = new DirectorySecurity();
security.SetAccessRule(rule);
dirInfo.Create(security);
}
else
{
DirectorySecurity security = dirInfo.GetAccessControl();
security.AddAccessRule(rule);
dirInfo.SetAccessControl(security);
}
}
private void DeleteDirectory(string dirPath, bool recursive)
{
DirectoryInfo dirInfo = new DirectoryInfo(dirPath);
if (recursive)
{
dirInfo.Delete(true);
}
else if (dirInfo.GetFileSystemInfos().Length == 0)
{
dirInfo.Delete();
}
}
}
}