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);
}
///
/// Create a new file association
///
/// Extension of the file type, including the seperator) (ie: ".torrent")
/// File Type Key (can be referenced to create multiple extensions for one file type)
/// Description for the file type
/// Path (ie. '"C:\Executable.exe" "%1"')
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);
}
}
}