How to create start menu shortcut

前端 未结 3 1014
有刺的猬
有刺的猬 2021-02-04 08:41

I am building a custom installer. How can I create a shortcut to an executable in the start menu? This is what I\'ve come up with so far:

    string pathToExe          


        
3条回答
  •  梦毁少年i
    2021-02-04 09:37

    By MSI setup, you can easily create Start Menu Shortcut for your application. But when it comes to custom installer setup, you need to write custom code to create All Programs shortcut. In C#, you can create shortcut using Windows Script Host library.

    Note: To use Windows Script Host library, you need to add a reference under References > COM tab > Windows Script Host Object Model.

    See this article for more info: http://www.morgantechspace.com/2015/01/create-start-menu-shortcut-all-programs-csharp.html

    Create shortcut only for Current User:

    string programs_path = Environment.GetFolderPath(Environment.SpecialFolder.Programs);
        string shortcutFolder = Path.Combine(programs_path, @"YourAppFolder\SampleApp");
        if (!Directory.Exists(shortcutFolder))
        {
            Directory.CreateDirectory(shortcutFolder);
        }
        WshShellClass shellClass = new WshShellClass();
        string settingsLink = Path.Combine(shortcutFolder, "Settings.lnk");
        IWshShortcut shortcut = (IWshShortcut)shellClass.CreateShortcut(settingsLink);
        shortcut.TargetPath = @"C:\Program Files\YourAppFolder\MyAppSettings.exe";
        shortcut.IconLocation = @"C:\Program Files\YourAppFolder\settings.ico";
        shortcut.Arguments = "arg1 arg2";
        shortcut.Description = "Click to edit SampleApp settings";
        shortcut.Save();
    

    Create Shortcut for All Users:

    You can get common profile path for All Users by using API function SHGetSpecialFolderPath.

    using IWshRuntimeLibrary;
    using System.Runtime.InteropServices;
    ---------------------------------
    [DllImport("shell32.dll")]
    static extern bool SHGetSpecialFolderPath(IntPtr hwndOwner, [Out] StringBuilder lpszPath, int nFolder, bool fCreate);
    const int CSIDL_COMMON_STARTMENU = 0x16;
    
    public static void CreateShortcutForAllUsers()
    {
        StringBuilder allUserProfile = new StringBuilder(260);
        SHGetSpecialFolderPath(IntPtr.Zero, allUserProfile, CSIDL_COMMON_STARTMENU, false);
        //The above API call returns: C:\ProgramData\Microsoft\Windows\Start Menu
        string programs_path = Path.Combine(allUserProfile.ToString(), "Programs");
    
        string shortcutFolder = Path.Combine(programs_path, @"YourAppFolder\SampleApp");
        if (!Directory.Exists(shortcutFolder))
        {
            Directory.CreateDirectory(shortcutFolder);
        }
        WshShellClass shellClass = new WshShellClass();
        //Create Shortcut for Application Settings
        string settingsLink = Path.Combine(shortcutFolder, "Settings.lnk");
        IWshShortcut shortcut = (IWshShortcut)shellClass.CreateShortcut(settingsLink);
        shortcut.TargetPath = @"C:\Program Files\YourAppFolder\MyAppSettings.exe";
        shortcut.IconLocation = @"C:\Program Files\YourAppFolder\settings.ico";
        shortcut.Arguments = "arg1 arg2";
        shortcut.Description = "Click to edit SampleApp settings";
        shortcut.Save();
    }
    

提交回复
热议问题