创建一个文件快捷方式 (.lnk)

30

我一直在寻找一种在C#中创建文件快捷方式的简单方法,但是我只找到了做这件事情的外部DLL库。实际上,令人惊讶的是,没有内置的方法可以这样做。

无论如何,我知道lnk文件只是带有特定命令和给定路径的文本文件。我想也许我可以在代码中创建一个文本文件,将它的文本设置为正确的命令并将它的扩展名改成.lnk。首先我尝试手动这样做,但失败了。

有没有办法像这样做(或者可能有其他简单的方法)在C#中创建指向特定路径的快捷方式?

请注意,我所说的快捷方式是指导致该文件的.lnk文件 编辑:当我说文件时,我的意思是任何我想要的文件,而不仅仅是我的应用程序的快捷方式。


如果对于每种情况都不能正常工作,我会进行编辑。

添加以下引用:

  1. Microsoft Shell Controls And Automation
  2. Windows Script Host Object Model

添加以下命名空间:

using Shell32;
using IWshRuntimeLibrary;

接下来似乎在运作:

var wsh = new IWshShell_Class();
IWshRuntimeLibrary.IWshShortcut shortcut = wsh.CreateShortcut(
    Environment.GetFolderPath(Environment.SpecialFolder.Desktop) + "\\shorcut2.lnk") as IWshRuntimeLibrary.IWshShortcut;
shortcut.TargetPath = @"C:\Users\Zimin\Desktop\test folder";            
shortcut.Save();
希望它也能对其他人有所帮助,感谢您的关注。
此外,如果有办法创建一个文件,编写正确的命令,然后将其更改为 lnk 文件,请告诉我。

此外,请参阅http://social.msdn.microsoft.com/Forums/windows/en-US/e0ac908d-8c33-4d99-88dd-d8d8be77d198/how-to-create-a-decktop-icon-for-exe-file-in-c-windows-application-through-setup,了解如何通过安装程序为C# Windows应用程序创建桌面图标。 - user1477388
据我所知,自从链接的答案发布以来,还没有更好的方法。在提问时,请避免在标题中使用标签和“感谢备注”,如有疑问可在 meta 上讨论。 - Alexei Levenkov
你想创建应用程序或其他文件的快捷方式吗? - Ehsan
我知道 lnk 文件只是带有特定命令和给定路径的文本文件。不,这完全不正确。.lnk 是一个二进制文件。请参阅 http://msdn.microsoft.com/en-us/library/dd871305.aspx。在发布问题之前,你有做过任何研究吗? - Jim Mischel
是的,我已经做了研究,有人(我想是在stackoverflow上,但不确定)说那些只是带有命令的文本文件。 我甚至找到了应该起作用的命令行,但它没有起作用。 我还尝试使用user1477388提供的示例之一进行工作,但即使添加了引用,我的vs也无法识别Shell32和IWshRuntimeLibrary。 - user2599803
显示剩余3条评论
1个回答

23

Joepro在这里的回答中指出了一种方法:

 

您需要向Windows Scripting Host添加COM引用。 据我所知,没有本地的.NET方法可以做到这一点。

WshShellClass wsh = new WshShellClass();
IWshRuntimeLibrary.IWshShortcut shortcut = wsh.CreateShortcut(
    Environment.GetFolderPath(Environment.SpecialFolder.Desktop) + "\\shorcut.lnk") as IWshRuntimeLibrary.IWshShortcut;
shortcut.Arguments = "";
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();
对于 .Net 4.0 及以上版本,请将第一行替换为以下内容:
 WshShell wsh = new WshShell();

编辑: 这个链接也可以帮助你


1
这似乎没问题,我已经见过了。 我只是有其他想法...但如果这样可以让我做到那个,而且没有更好的方法,我猜我会尝试使用它。 - user2599803
3
引用 Windows 脚本宿主时,“嵌入互操作类型”应设置为 false。否则,您将会收到“类型 'IWshRuntimeLibrary.WshShellClass' 没有定义构造函数”的错误提示。请注意不要改变原意。 - Halil
4
添加引用 > COM > Windows 脚本宿主对象模型 - Doug

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接