关于winforms:如何使用命令行参数在C#中创建应用程序快捷方式(.lnk文件)

How do you create an application shortcut (.lnk file) in C# with command line arguments

我已经编写了一个简单的基于ftp的文件同步程序。其设置可以存储在XML文件中。我希望用户能够使用各种配置快速打开程序。因此,我设置程序,使其能够通过命令行参数读取配置文件的路径。这样就可以根据不同的配置文件在桌面上创建快捷方式。现在我正在尝试添加一个自动为特定配置文件创建快捷方式的功能。

我已经尝试使用本文中使用shelllink.cs的示例。我也尝试过使用iwshuntimelibrary,如本文所述。我可以创建快捷方式,但"属性"窗口中快捷方式的"目标类型"最终在新快捷方式中为空。如果双击快捷方式,我会从Windows中得到一个错误窗口,说明在提供的路径上查找foobar.xml时遇到问题。所以它似乎没有意识到它应该启动一个应用程序而不是打开一个文件。

现在,如果我打开新快捷方式的属性并在目标字段中更改一些内容,然后将其更改回。例如,从XML中删除X,然后再将其添加回去。单击"确定"后,快捷方式的图标立即切换到"我的应用程序"的图标,并在双击时正常工作。

因此,当我手动编辑快捷方式时,它会强制Windows检查快捷方式目标类型是否应为应用程序并将其切换。

那么,当目标路径不是以.exe结尾时,如何通过c_创建一个新的应用程序目标类型的快捷方式呢?


您需要添加对Windows脚本宿主的COM引用。Afaik,没有本地的.NET方法可以做到这一点。

此示例将在桌面上创建快捷方式。它将使用XML文件集作为命令行参数启动ftp应用程序。只需将值更改为您需要的值。

1
2
3
4
5
6
7
8
9
10
11
        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();

使用此代码,目标类型将正确填充为应用程序,并以settings1.xml作为命令行参数启动应用程序。从你的问题来看,我认为这就是你想做的。但是,我认为您不能创建一个到的快捷方式,比如说一个XML文件,并将目标类型设置为应用程序。

对于.NET 4.0及更高版本,将第一行替换为以下内容(感谢Millie Smith!):

1
        WshShell wsh = new WshShell();