• Status: Solved
  • Priority: Medium
  • Security: Public
  • Views: 1130
  • Last Modified:

C# windows forms app change permissions on MDB file

I have a windows application written in C#. I use InstallAware as the packager and all seems to go well on install. I have an access database file as the data store of the application which is stored in the Program Data section of the users machine which allows full write capabilities etc. My problem is that i cannot get the permissions i apply to the file to stay after the install.

Once installed, the program auto-starts and queries user for info which is written to the application no problem. The Security permissions on the file are set to Full Control for everyone on install correctly. The problem happens once the application is closed and restarted. The database file then has the permissions stripped to only read & execute and read for the Users group.

I have to physically go in and add the write permission and all runs fine after that but i do not want to have end users doing this.

Can someone help me with code to assign permissions to all users or users for at LEAST read/write?

Thanks in advance!

Cheers
0
Winston Smith
Asked:
Winston Smith
2 Solutions
 
rawinnlnx9Commented:
This post here explains exactly how to do this. Please read the reply that is Green as it is the answer:

http://social.msdn.microsoft.com/Forums/eu/windowssdk/thread/de213b61-dc7e-4f33-acdb-893aa96837fa
0
 
davesgonebananasCommented:
The ProgramData or CommonApplicationData special folder is used for system wide application specific data and AFAIK normal users have read permissions to this folder by default.

You can change permissions using ICACLS or in C# using the code below:
http://www.codeproject.com/tips/61987/Allow-write-modify-access-to-CommonApplicationData.aspx
0
 
Todd GerbertIT ConsultantCommented:
I would guess that your MDB's access control list may contain Everyone:FullControl, but does not specify to ignore inherited permissions.  Or, your application is deleting & recreating the file - in which case the new one would inherit permissions from the containing folder.

I'm not familiar with InstallAware - how are you setting the permissions at install?
0
 
Winston SmithDeveloperAuthor Commented:
Used a combination of code form your posts. Thanks for the help. Below is the code i used if anyone else is stuck on this
0
 
Winston SmithDeveloperAuthor Commented:
 
private void Whatever(){
//grab the currently logged in user
string nametext = WindowsIdentity.GetCurrent().Name;

AddDirectorySecurity(DBFile, @nametext, FileSystemRights.ReadAndExecute, AccessControlType.Allow);
 AddDirectorySecurity(DBFile, @nametext, FileSystemRights.Write, AccessControlType.Allow);
}

 // Adds an ACL entry on the specified directory for the specified account.
        public static void AddDirectorySecurity(string FileName, string Account, FileSystemRights Rights, AccessControlType ControlType)
        {
            // Create a new DirectoryInfo object.
            DirectoryInfo dInfo = new DirectoryInfo(FileName);

            // Get a DirectorySecurity object that represents the 
            // current security settings.
            DirectorySecurity dSecurity = dInfo.GetAccessControl();

            // Add the FileSystemAccessRule to the security settings. 
            dSecurity.AddAccessRule(new FileSystemAccessRule(Account,
                                                            Rights,
                                                            ControlType));

            // Set the new access settings.
            dInfo.SetAccessControl(dSecurity);

        }

Open in new window

0

Featured Post

Concerto Cloud for Software Providers & ISVs

Can Concerto Cloud Services help you focus on evolving your application offerings, while delivering the best cloud experience to your customers? From DevOps to revenue models and customer support, the answer is yes!

Learn how Concerto can help you.

Tackle projects and never again get stuck behind a technical roadblock.
Join Now