writeline strings literal interpolación cadenas c# .net-4.0 shortcut

c# - strings - Cómo crear un atajo de menú de inicio



verbatim c# (3)

Esto es más o menos lo mismo que esta pregunta: Crear acceso directo en el escritorio C # .

Para copiar desde esa respuesta , deberá crear el archivo de acceso directo usted mismo.

using (StreamWriter writer = new StreamWriter(appStartMenuPath + ".url")) { writer.WriteLine("[InternetShortcut]"); writer.WriteLine("URL=file:///" + pathToExe); writer.WriteLine("IconIndex=0"); string icon = pathToExe.Replace(''//', ''/''); writer.WriteLine("IconFile=" + icon); }

Este código no se ha probado, por supuesto, pero fue aceptado en esa otra pregunta y se ve bien.

Veo otra respuesta a esa pregunta que enumera cómo hacerlo con la API de Windows y algo de interoperabilidad COM, pero estaría tentado de evitarlo y simplemente usar el código anterior si funciona. Es una preferencia más personal que cualquier otra cosa, y normalmente estaría a favor de usar una API preestablecida para esto, pero cuando la solución es así de simple, no estoy seguro de qué valor tiene esa opción. Pero, en buena medida, creo que este código debería funcionar. Nuevamente, por supuesto, no ha sido probado. Y especialmente aquí donde juegas con cosas como esta, asegúrate de entender cada línea antes de ejecutarla. No me gustaría verte estropear algo en tu sistema debido a un seguimiento ciego del código que publiqué.

WshShell shell = new WshShell(); IWshShortcut shortcut = (IWshShortcut)shell.CreateShortcut(appStartMenuPath + ".lnk"); shortcut.Description = "Shortcut for TestApp"; shortcut.TargetPath = pathToExe; shortcut.Save();

Por supuesto, también necesitará una referencia al "Modelo de objetos de Windows Script Host", que se puede encontrar en "Agregar una referencia" y luego "COM".

Estoy construyendo un instalador personalizado. ¿Cómo puedo crear un acceso directo a un ejecutable en el menú de inicio? Esto es lo que he propuesto hasta ahora:

string pathToExe = @"C:/Program Files (x86)/TestApp/TestApp.exe"; string commonStartMenuPath = Environment.GetFolderPath(Environment.SpecialFolder.CommonStartMenu); string appStartMenuPath = Path.Combine(commonStartMenuPath, "Programs", "TestApp"); // TODO: create shortcut in appStartMenuPath

Me estoy enfocando en Windows 7.


Mediante la configuración de MSI, puede crear fácilmente el acceso directo del menú de inicio para su aplicación. Pero cuando se trata de la instalación personalizada del instalador, debe escribir un código personalizado para crear el acceso directo a Todos los programas. En C # , puede crear acceso directo usando la biblioteca Windows Script Host .

Nota: Para usar la biblioteca de Windows Script Host , debe agregar una referencia en References> COM tab> Windows Script Host Object Model .

Vea este artículo para más información: http://www.morgantechspace.com/2015/01/create-start-menu-shortcut-all-programs-csharp.html

Crear acceso directo solo para el usuario actual :

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();

Crear acceso directo para todos los usuarios :

Puede obtener una ruta de perfil común para Todos los usuarios mediante la función API 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(); }


Uso de Windows Script Host (asegúrese de agregar una referencia al Modelo de objetos de Windows Script Host, en Referencias> pestaña COM):

using IWshRuntimeLibrary; private static void AddShortcut() { string pathToExe = @"C:/Program Files (x86)/TestApp/TestApp.exe"; string commonStartMenuPath = Environment.GetFolderPath(Environment.SpecialFolder.CommonStartMenu); string appStartMenuPath = Path.Combine(commonStartMenuPath, "Programs", "TestApp"); if (!Directory.Exists(appStartMenuPath)) Directory.CreateDirectory(appStartMenuPath); string shortcutLocation = Path.Combine(appStartMenuPath, "Shortcut to Test App" + ".lnk"); WshShell shell = new WshShell(); IWshShortcut shortcut = (IWshShortcut)shell.CreateShortcut(shortcutLocation); shortcut.Description = "Test App Description"; //shortcut.IconLocation = @"C:/Program Files (x86)/TestApp/TestApp.ico"; //uncomment to set the icon of the shortcut shortcut.TargetPath = pathToExe; shortcut.Save(); }