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

Posted

技术标签:

【中文标题】如何在 C# 中使用命令行参数创建应用程序快捷方式(.lnk 文件)【英文标题】:How do you create an application shortcut (.lnk file) in C# with command line arguments 【发布时间】:2010-12-02 20:43:29 【问题描述】:

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

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

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

看来,当我手动编辑快捷方式时,它会强制窗口检查快捷方式目标类型是否应该是应用程序并切换它。

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

【问题讨论】:

我认为这不可能。你的FTP程序不是.exe吗?您指定命令行参数的事实应该仍然允许您使用应用程序目标类型创建快捷方式。我使用 IWshRuntimeLibrary 发布了一个对我来说正确的答案,但在重新阅读您的问题后被删除。如果这确实是您想要做的,我可以再次发布 【参考方案1】:

您需要添加对 Windows 脚本宿主的 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();

【讨论】:

添加参考 > COM > Windows 脚本宿主对象模型 您好 :) 我尝试了代码,但它在这部分代码中返回错误 WshShellClass wsh = new WshShellClass(); 它说:错误 1 ​​无法嵌入互操作类型“IWshRuntimeLibrary.WshShellClass”。请改用适用的接口。 @MichayCarpa ***.com/a/4553402/2850543 得到了至少可以为我编译的代码。对于 .Net 4.0 及更高版本,第一行应为 WshShell wsh = new WshShell();

以上是关于如何在 C# 中使用命令行参数创建应用程序快捷方式(.lnk 文件)的主要内容,如果未能解决你的问题,请参考以下文章

如何避免重定向输出符号“>”被当作命令行参数(可能在快捷方式中)

如何在 C# 中使用多个引用编辑快捷方式的目标路径

如何在Windows中通过命令行创建快捷方式?

(31)C#开发命令行的程序

eclipserunconfiguration配置启动参数

Windows 命令行批处理脚本创建快捷方式