private void MainWindow_Closing(object sender, System.ComponentModel.CancelEventArgs e) { //Make sure to cleanup !!! foreach (string name in _names) { DesktopAppLink.RemoveLink(name); } }
/// <summary> /// creates Links that call any application on your system /// </summary> /// <param name="protocolName"> /// the name of the custom protocol you are about to install /// Create your hyperlinks like this: href="protocolName:" /// </param> /// <param name="applicationPath">exact path to the executable</param> /// <param name="arguments">any arguments you pass here will be forwarded to the executable</param> /// <param name="iconPath">some browsers will show the icon when invoking the application - optional</param> public static void CreateLink( string protocolName, string applicationPath, string arguments, string iconPath = null) { try { //Delete existing with same name RemoveLink(protocolName.ToLower()); RegistryKey root = Registry.ClassesRoot.CreateSubKey(protocolName.ToLower()); if (root == null) { throw new ArgumentException("error on creating root key"); } root.SetValue("URL Protocol", ""); root.SetValue(null, $"URL:{protocolName.ToLower()}"); if (!string.IsNullOrEmpty(iconPath)) { var iconKey = root.CreateSubKey("DefaultIcon"); if (iconKey == null) { throw new Exception("error on creating icon key"); } iconKey.SetValue(null, $"\"{iconPath}\""); } var commandKey = root.CreateSubKey("shell")?.CreateSubKey("open")?.CreateSubKey("command"); if (commandKey == null) { throw new Exception("error on creating command key"); } commandKey.SetValue(null, $"\"{applicationPath}\" {arguments} \"%1\""); root.Close(); } catch (Exception) { //Let's not leave broken entries behind ! DesktopAppLink.RemoveLink(protocolName); throw; } }