/// <summary>
        /// Removes the association of the specifed file type with the client.
        /// </summary>
        /// <param name="p_fasFileAssociation">The description of the file type association to remove.</param>
        /// <exception cref="InvalidOperationException">Thrown if the user does not have sufficient priviledges
        /// to remove the association.</exception>
        protected void UnassociateFile(FileAssociationSetting p_fasFileAssociation)
        {
            if (!UacUtil.IsElevated)
            {
                throw new InvalidOperationException("You must have administrative privileges to change file associations.");
            }

            string strFileId = p_fasFileAssociation.Extension.TrimStart('.').ToUpperInvariant() + "_File_Type";

            string[] strKeys = Registry.ClassesRoot.GetSubKeyNames();
            if (Array.IndexOf <string>(strKeys, strFileId) != -1)
            {
                Registry.ClassesRoot.DeleteSubKeyTree(strFileId);
                Registry.ClassesRoot.DeleteSubKeyTree(p_fasFileAssociation.Extension);
            }
        }
        /// <summary>
        /// Associates the specifed file type with the client.
        /// </summary>
        /// <param name="p_fasFileAssociation">The description of the file type association to create.</param>
        /// <exception cref="InvalidOperationException">Thrown if the user does not have sufficient priviledges
        /// to create the association.</exception>
        protected void AssociateFile(FileAssociationSetting p_fasFileAssociation)
        {
            if (!UacUtil.IsElevated)
            {
                throw new InvalidOperationException("You must have administrative privileges to change file associations.");
            }

            string strFileId = p_fasFileAssociation.Extension.TrimStart('.').ToUpperInvariant() + "_File_Type";

            try
            {
                Registry.SetValue(@"HKEY_CLASSES_ROOT\" + p_fasFileAssociation.Extension, null, strFileId);
                Registry.SetValue(@"HKEY_CLASSES_ROOT\" + strFileId, null, p_fasFileAssociation.Description, RegistryValueKind.String);
                Registry.SetValue(@"HKEY_CLASSES_ROOT\" + strFileId + @"\DefaultIcon", null, Application.ExecutablePath + ",0", RegistryValueKind.String);
                Registry.SetValue(@"HKEY_CLASSES_ROOT\" + strFileId + @"\shell\open\command", null, "\"" + Application.ExecutablePath + "\" \"%1\"", RegistryValueKind.String);
            }
            catch (UnauthorizedAccessException)
            {
                throw new InvalidOperationException("Something (usually your antivirus) is preventing the program from interacting with the registry and changing the file associations.");
            }
        }