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

pkln4tw6  于 2023-10-23  发布在  C#
关注(0)|答案(1)|浏览(147)

我写了一个简单的基于FTP的文件同步程序。其设置可以存储在XML文件中。我希望用户能够使用各种配置快速打开程序。所以我设置了程序,使其能够通过命令行参数读取配置文件的路径。通过这种方式,可以根据不同的配置文件在桌面上创建快捷方式。现在我尝试添加一个功能,将自动创建一个特定的配置文件的快捷方式。
我已经尝试使用this post中的示例使用ShellLink.cs。我也试过使用IWshRuntimeLibrary,如here所述。我能够创建快捷方式,但快捷方式的“目标类型”在属性窗口中最终在新快捷方式中为空。如果我双击快捷方式,我会从windows得到一个错误窗口,说在提供的路径下查找FooBar.xml有问题。所以它似乎没有意识到它应该启动一个应用程序而不是打开一个文件。
现在,如果我打开新快捷方式的属性并更改目标字段中的某些内容,然后将其更改回来。例如,从xml中删除x,然后将其添加回来。点击确定后,快捷方式的图标立即切换到我的应用程序的图标,并在双击时正常工作。
因此,当我手动编辑快捷方式时,它会强制Windows检查快捷方式目标类型是否应为应用程序并切换它。
那么,当目标路径不以.exe结尾时,如何通过C#创建目标类型为Application的新快捷方式呢?

bybem2ql

bybem2ql1#

您需要将COM引用添加到Windows Scripting Host。AFAIK,没有原生的 .NET 方法可以做到这一点。
此示例将在桌面上创建快捷方式。它将启动FTP应用程序,使用XML文件集作为命令行参数。只需将值更改为您需要的值。

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!):

WshShell wsh = new WshShell();

相关问题