コード例 #1
0
        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);
        }
コード例 #2
0
 private void MainWindow_Closing(object sender, System.ComponentModel.CancelEventArgs e)
 {
     //Make sure to cleanup !!!
     foreach (string name in _names)
     {
         DesktopAppLink.RemoveLink(name);
     }
 }
コード例 #3
0
        /// <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;
            }
        }