Search code examples
.netclickoncesmartclient

Can I create a desktop icon for a ClickOnce application?


I have read in some of the ClickOnce posts that ClickOnce does not allow you to create a desktop icon for you application. Is there any way around this?


Solution

  • In Visual Studio 2005, ClickOnce does not have the ability to create a desktop icon, but it is now available in Visual Studio 2008 SP1. In Visual Studio 2005, you can use the following code to create a desktop icon for you when the application starts.

    I have used this code over several projects for a couple of months now without any problem. I must say that all my applications have been deployed over an intranet in a controlled environment. Also, the icon is not removed when the application is uninstalled. This code creates a shortcut to the shortcut on the start menu that ClickOnce creates.

    private void CreateDesktopIcon()
    {
        ApplicationDeployment ad = ApplicationDeployment.CurrentDeployment;
    
            if (ad.IsFirstRun)
            {
                Assembly assembly = Assembly.GetEntryAssembly();
                string company = string.Empty;
                string description = string.Empty;
    
                if (Attribute.IsDefined(assembly, typeof(AssemblyCompanyAttribute)))
                {
                    AssemblyCompanyAttribute ascompany =
                      (AssemblyCompanyAttribute)Attribute.GetCustomAttribute(
                        assembly, typeof(AssemblyCompanyAttribute));
    
                    company = ascompany.Company;
                }
                if (Attribute.IsDefined(assembly, typeof(AssemblyDescriptionAttribute)))
                {
                    AssemblyDescriptionAttribute asdescription =
                      (AssemblyDescriptionAttribute)Attribute.GetCustomAttribute(
                        assembly, typeof(AssemblyDescriptionAttribute));
    
                    description = asdescription.Description;
                }
                if (!string.IsNullOrEmpty(company))
                {
                    string desktopPath = string.Empty;
                    desktopPath = string.Concat(
                                    Environment.GetFolderPath(Environment.SpecialFolder.Desktop),
                                    "\\",
                                    description,
                                    ".appref-ms");
    
                    string shortcutName = string.Empty;
                    shortcutName = string.Concat(
                                     Environment.GetFolderPath(Environment.SpecialFolder.Programs),
                                     "\\",
                                     company,
                                     "\\",
                                     description,
                                     ".appref-ms");
    
                    System.IO.File.Copy(shortcutName, desktopPath, true);
                }
            }
        }
    }