94 lines
3.2 KiB
C#
94 lines
3.2 KiB
C#
using System;
|
|
using System.Windows.Forms;
|
|
using System.Security.Permissions;
|
|
using Microsoft.Win32;
|
|
|
|
namespace ARCHBLOXProtocol
|
|
{
|
|
class SharedVariables
|
|
{
|
|
public static string Arguments = "";
|
|
};
|
|
internal static class ARCHBLOXURIProtocol
|
|
{
|
|
private const string _Protocol = "archblox";
|
|
private const string _ProtocolHandler = "url.archblox";
|
|
|
|
private static readonly string _launch = string.Format(
|
|
"{0}{1}{0} {0}%1{0}", (char)34, Application.ExecutablePath);
|
|
|
|
private static readonly Version _win8Version = new Version(6, 2, 9200, 0);
|
|
private static readonly bool _isWin8 =
|
|
Environment.OSVersion.Platform == PlatformID.Win32NT &&
|
|
Environment.OSVersion.Version >= _win8Version;
|
|
|
|
internal static void Register()
|
|
{
|
|
if (_isWin8) RegisterWin8();
|
|
else RegisterWin7();
|
|
}
|
|
|
|
private static void RegisterWin7()
|
|
{
|
|
var regKey = Registry.ClassesRoot.CreateSubKey(_Protocol);
|
|
|
|
regKey.CreateSubKey("DefaultIcon")
|
|
.SetValue(null, string.Format("{0}{1},1{0}", (char)34,
|
|
Application.ExecutablePath));
|
|
|
|
regKey.SetValue(null, "URL:archblox Protocol");
|
|
regKey.SetValue("URL Protocol", "");
|
|
|
|
regKey = regKey.CreateSubKey(@"shell\open\command");
|
|
regKey.SetValue(null, _launch);
|
|
}
|
|
|
|
private static void RegisterWin8()
|
|
{
|
|
RegisterWin7();
|
|
|
|
var regKey = Registry.LocalMachine.CreateSubKey(@"SOFTWARE\Classes")
|
|
.CreateSubKey(_ProtocolHandler);
|
|
|
|
regKey.SetValue(null, _Protocol);
|
|
|
|
regKey.CreateSubKey("DefaultIcon")
|
|
.SetValue(null, string.Format("{0}{1},1{0}", (char)34,
|
|
Application.ExecutablePath));
|
|
|
|
regKey.CreateSubKey(@"shell\open\command").SetValue(null, _launch);
|
|
|
|
Registry.LocalMachine.CreateSubKey(string.Format(
|
|
@"SOFTWARE\{0}\{1}\Capabilities\ApplicationDescription\URLAssociations",
|
|
Application.CompanyName, Application.ProductName))
|
|
.SetValue(_Protocol, _ProtocolHandler);
|
|
|
|
Registry.LocalMachine.CreateSubKey(@"SOFTWARE\RegisteredApplications")
|
|
.SetValue(Application.ProductName, string.Format(
|
|
@"SOFTWARE\{0}\Capabilities", Application.ProductName));
|
|
}
|
|
|
|
internal static void Unregister()
|
|
{
|
|
PrincipalPermission principalPerm = new PrincipalPermission(null, "Administrators");
|
|
principalPerm.Demand();
|
|
|
|
if (!_isWin8)
|
|
{
|
|
Registry.ClassesRoot.DeleteSubKeyTree("archblox", false);
|
|
return;
|
|
}
|
|
|
|
// extra work required.
|
|
Registry.LocalMachine.CreateSubKey(@"SOFTWARE\Classes")
|
|
.DeleteSubKeyTree(_ProtocolHandler, false);
|
|
|
|
Registry.LocalMachine.DeleteSubKeyTree(string.Format(@"SOFTWARE\{0}\{1}",
|
|
Application.CompanyName, Application.ProductName));
|
|
|
|
Registry.LocalMachine.CreateSubKey(@"SOFTWARE\RegisteredApplications")
|
|
.DeleteValue(Application.ProductName);
|
|
}
|
|
}
|
|
}
|