Search code examples
okuma

Where to put settings in Windows 7 on Okuma control


I'm writing an application that will run on the Okuma control and have application settings. Since one of the conditions is that application's settings must be easily backed up, I'm keeping them in the application directory. It works on the control because applications go to the D: but if someone installs the application on a PC on the C drive, the application can't access it's own application directory and it gets errors.

Conditions:

  • Windows 7
  • P300 control
  • Application being installed to D-drive
  • Has to work if someone installs to the C-drive on a PC

Is there a standard spot to put all application settings?


Solution

  • Continue to keep your application settings and other data in the application's install directory. There is no need to change the directory locations just for a "PC only" install.

    The solution to file access issues is to change file permissions during install.

    For example, this answer someone posted using WIX installer.

    A similar question is answered here.

    You could use code similar to this to change permissions during install (when the user has admin privileges)

    using System.Security.Principal;
    
    public static void SetPermissions()
    {
    String path = GetPath();
    try
    {
        // Create security idenifier for all users (WorldSid)  
        SecurityIdentifier sid = new SecurityIdentifier(WellKnownSidType.WorldSid, null);  
        DirectoryInfo di = new DirectoryInfo(path);  
        DirectorySecurity ds = di.GetAccessControl();  
    
        // add a new file access rule w/ write/modify for all users to the directory security object
    
        ds.AddAccessRule(new FileSystemAccessRule(sid, 
            FileSystemRights.Write | FileSystemRights.Modify,
            InheritanceFlags.ObjectInherit | InheritanceFlags.ContainerInherit,   // all sub-dirs to inherit
            PropagationFlags.None,
            AccessControlType.Allow));                                            // Turn write and modify on
        // Apply the directory security to the directory
        di.SetAccessControl(ds);
        }
        catch (Exception ex)
        {
            MessageBox.Show(ex.Message);
        }
    }