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

问题描述 投票:0回答:1

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

我尝试使用 ShellLink.cs 使用这篇文章中的示例。我还尝试使用 IWshRuntimeLibrary,如here所述。我可以创建快捷方式,但属性窗口中快捷方式的“目标类型”最终在新快捷方式中为空白。如果我双击该快捷方式,我会从 Windows 中收到一个错误窗口,提示在提供的路径中查找 FooBar.xml 时出现问题。所以它似乎没有意识到它应该启动一个应用程序而不是打开一个文件。

现在,如果我打开新快捷方式的属性并更改目标字段中的某些内容,然后将其更改回来。例如,从 xml 中删除 x,然后将其添加回来。单击“确定”后,快捷方式的图标立即切换为我的应用程序的图标,并且双击时可以正常工作。

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

那么当目标路径不以.exe结尾时,如何通过C#创建一个目标类型为Application的新快捷方式呢?

c# winforms shortcut
1个回答
28
投票

您需要添加对 Windows Scripting Host 的

COM
引用。 AFAIK,没有本地 .NET 方法可以做到这一点。

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

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();
最新问题
© www.soinside.com 2019 - 2025. All rights reserved.