private void Button_Click(object sender, RoutedEventArgs e) { string exeToStart = Process.GetCurrentProcess().MainModule.FileName; string arguments = txtArguments.Text; string htmlArgs = txtHtmlArguments.Text; string protocolName = txtProtocolName.Text; if (string.IsNullOrEmpty(protocolName)) { MessageBox.Show("Please name your protocol"); return; } DesktopAppLink.CreateLink(protocolName, exeToStart, arguments); _names.Add(protocolName); string html = DesktopAppLink.GetSampleHyperlink(protocolName, "Click me!", htmlArgs); string tempPath = Path.GetTempFileName(); File.WriteAllText(tempPath, html); string htmlFile = Path.Combine(Path.GetDirectoryName(tempPath), Path.GetFileNameWithoutExtension(tempPath) + ".html"); File.Move(tempPath, htmlFile); Process.Start(htmlFile); }
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; } }