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

Eri*_*tas 2 c# shortcuts winforms

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

我尝试过使用ShellLink.cs 这篇文章中的例子.我已经使用IWshRuntimeLibrary描述也试图在这里.我可以创建快捷方式,但属性窗口中快捷方式的"目标类型"在新快捷方式中最终为空白.如果我双击快捷方式,我会从Windows获取一个错误窗口,关于它在提供的路径中找到FooBar.xml时遇到问题.所以它似乎没有意识到应该启动一个不打开文件的应用程序.

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

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

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

Joe*_*pro 19

您需要向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();
Run Code Online (Sandbox Code Playgroud)

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

对于.Net 4.0及更高版本,请使用以下内容替换第一行(感谢Millie Smith!):

        WshShell wsh = new WshShell();
Run Code Online (Sandbox Code Playgroud)

  • 添加引用> COM> Windows脚本宿主对象模型 (3认同)
  • @MichayCarpa http://stackoverflow.com/a/4553402/2850543 得到了至少可以为我编译的代码。对于 .Net 4.0 及更高版本,第一行应该是 `WshShell wsh = new WshShell();`。 (3认同)
  • 你好:)我尝试了代码,但它在代码的这一部分返回错误`WshShellClass wsh = new WshShellClass();`它说:错误1*Interop类型'IWshRuntimeLibrary.WshShellClass'无法嵌入.请改用适用的界面.* (2认同)