Registry File Association
using System; using System.Collections.Generic; using System.Linq; using System.Text; using Microsoft.Win32; using System.Reflection; namespace SynoManager.Utils { public static class FileAssociation { public static bool DoesFileAssociationExists(string extension) { RegistryKey classes = GetClasses(); RegistryKey extensionKey = classes.OpenSubKey(extension); return (extensionKey != null); } /// <summary> /// Create a new file association /// </summary> /// <param name="extension">Extension of the file type, including the seperator) (ie: ".torrent")</param> /// <param name="key">File Type Key (can be referenced to create multiple extensions for one file type)</param> /// <param name="description">Description for the file type</param> /// <param name="path">Path (ie. '"C:\Executable.exe" "%1"')</param> public static void CreateFileAssociation(string extension, string key, string description, string path) { RegistryKey classes = GetClasses(); RegistryKey extensionKey = classes.CreateSubKey(extension); extensionKey.SetValue(null, key); RegistryKey typeKey = classes.CreateSubKey(key); typeKey.SetValue(null, description); RegistryKey shellKey = typeKey.CreateSubKey("shell"); RegistryKey shellOpenKey = shellKey.CreateSubKey("open"); RegistryKey shellOpenCommandKey = shellOpenKey.CreateSubKey("command"); shellOpenCommandKey.SetValue(null, path); } private static RegistryKey GetClasses() { return Registry.ClassesRoot; RegistryKey currentUser = Registry.CurrentUser; RegistryKey software = currentUser.OpenSubKey("Software"); return software.OpenSubKey("Classes"); } public static void AssociateTorrents() { string path = String.Format("\"{0}\" \"%1\"", Assembly.GetEntryAssembly().Location); CreateFileAssociation(".torrent","TorrentFile", "BitTorrent Download File", path); } public static void AssociateNZB() { string path = String.Format("\"{0}\" \"%1\"", Assembly.GetEntryAssembly().Location); CreateFileAssociation(".nzb", "NZBFile", "NZB Download File", path); } } }