¿Cómo se crea un acceso directo de aplicación (archivo .lnk) en C # con argumentos de línea de comandos

StackOverflow https://stackoverflow.com/questions/1501608

  •  19-09-2019
  •  | 
  •  

Pregunta

He escrito un simple programa de sincronización de archivos basado en FTP. Los ajustes de la cual se pueden almacenar en un archivo XML. Quiero que los usuarios puedan abrir rápidamente el programa utilizando diversas configuraciones. Así que me puse en marcha el programa para ser capaz de leer la ruta de un archivo de configuración a través de argumentos de línea de comandos. De esta manera los accesos directos se pueden crear en el escritorio basado en diferentes ficheros de configuración. Ahora estoy tratando de añadir una característica que creará automáticamente el acceso directo para un archivo de configuración específico.

He intentado usar el ejemplo de este post usando ShellLink.cs. Y también he intentado usar IWshRuntimeLibrary como se describe aquí . Soy capaz de crear el acceso directo, pero el "tipo de destino" del acceso directo en la ventana de propiedades termina siendo blanco en el nuevo acceso directo. Si hago doble clic en el acceso consigo una ventana de error de las ventanas al respecto teniendo problemas para encontrar FooBar.xml en la ruta proporcionada. Por lo tanto, parece que no se da cuenta de que hay que iniciar una aplicación no abrir un archivo.

Ahora, si abro las propiedades del nuevo acceso directo y cambiar algo en el campo de destino, y luego cambiarlo de nuevo. Por ejemplo eliminar la x del xml y luego simplemente volver a agregarlo. Después de hacer clic en OK en el icono del acceso directo cambia inmediatamente al icono de mi aplicación, y funciona correctamente cuando se hace doble clic.

Así que parece que cuando puedo editar manualmente el acceso directo que obliga a las ventanas para comprobar si el tipo de destino del acceso directo debe ser de aplicación y cambia a él.

Entonces, ¿cómo puedo, a través de C #, crear un nuevo acceso directo con un tipo de destino de la aplicación cuando la ruta de destino no termina en .exe?

¿Fue útil?

Solución

Se tendrá que añadir una referencia COM para Windows Scripting Host. Que yo sepa, no hay forma nativa .NET para hacer esto.

Esta muestra creará un acceso directo en el escritorio. Se pondrá en marcha la aplicación FTP, usando el archivo XML establecer como un argumento de línea de comandos. Sólo cambia los valores a lo que necesita.

        WshShellClass wsh = new WshShellClass();
        IWshRuntimeLibrary.IWshShortcut shortcut = wsh.CreateShortcut(
            Environment.GetFolderPath(Environment.SpecialFolder.Desktop) + "\\shorcut.lnk") as IWshRuntimeLibrary.IWshShortcut;
        shortcut.Arguments = "c:\\app\\settings1.xml";
        shortcut.TargetPath = "c:\\app\\myftp.exe";
        // not sure about what this is for
        shortcut.WindowStyle = 1; 
        shortcut.Description = "my shortcut description";
        shortcut.WorkingDirectory = "c:\\app";
        shortcut.IconLocation = "specify icon location";
        shortcut.Save();

Con este código, el tipo de destino se rellena correctamente como aplicación y pondrá en marcha la aplicación con settings1.xml como un argumento de línea de comandos. Desde su pregunta, creo que esto es lo que está tratando de hacer. Sin embargo, no creo que se puede crear un acceso directo a, digamos simplemente un archivo XML, y tienen el tipo de destino establecido como aplicación.

Para .Net 4.0 y superior, reemplace la primera línea con lo siguiente (Gracias a Millie Smith!):

        WshShell wsh = new WshShell();
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top