c#以编程方式创建目录快捷方式并不总是有效

本文关键字:有效 快捷方式 编程 方式 创建目录 | 更新日期: 2023-09-27 18:17:01

我试图以编程方式创建一个目录的快捷方式。我找到了许多例子,但似乎没有一个是可靠的。

在生成的快捷键的属性中,我观察到三个不同的结果:
  1. 文件的快捷方式类型被指定为"快捷方式(. link)",这导致打开对话框弹出,要求我附加一个扩展到它。

  2. 文件属性的快捷方式类型被指定为"File",当双击时绝对不做任何事情。

  3. 最后一个当然是我最喜欢的…

  4. 文件属性的快捷方式类型被指定为:"File Folder"。

这是我目前使用的代码…我已经尝试了几个版本

bool IsExists = false;
string icon = appPath + "Welcome.ico";
// Their is a difference to local and ClickOnce App locations... this compensates for it
IsExists = System.IO.File.Exists(icon);
if (!IsExists)
{
    icon = appPath + @"bin'Debug'Welcome.ico";
}
var desktop = Environment.GetFolderPath(Environment.SpecialFolder.DesktopDirectory);
var target = (Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments) + @"'Artronix'Welcome To FreightWare Online'").Replace(@"'","/");
IWshShortcut shortcut;
var wshShell = new WshShellClass();
shortcut = (IWshShortcut)wshShell.CreateShortcut(Path.Combine(desktop, @"FreightWare Resources.lnk"));
shortcut.IconLocation = icon;
shortcut.TargetPath = Path.GetFullPath(target);
shortcut.Save();

c#以编程方式创建目录快捷方式并不总是有效

感谢大家的帮助…我想明白了。我不想把它作为一个答案,但想万一有人碰巧遇到同样的问题…虽然我为我的疏忽感到惭愧。

结果是代码没有任何问题。Panhandel说:"当目标路径不存在时,我才得到了第一个结果。"这句话给了我一个找到解决方案的线索。因为他总是得到正确的结果,他只得到我在目录不存在时得到的结果……我意识到问题可能是我在一行中以编程方式创建目录,然后在下一行中创建图标…我需要给系统更多的时间来完全创建目录

尝试ShellLink :

using (ShellLink shortcut = new ShellLink())
{
    shortcut.Target = Application.ExecutablePath;
    shortcut.WorkingDirectory = Path.GetDirectoryName(Application.ExecutablePath);
    shortcut.Description = "My Shorcut Name Here";
    shortcut.DisplayMode = ShellLink.LinkDisplayMode.edmNormal;
    shortcut.Save("%HOMEPATH%/Desktop/");
}

在这个问题上我有一个小小的变化…

我最终发现了一个附加条件:

  1. 创建快捷方式时,目标路径必须指向一个文件夹(如上所述)
  2. 但也-似乎提供的目标路径也必须是规范化 -例如通过Path.GetFullPath(possiblyUnNormalizedPath)见如何在。net中获得绝对或规范化的文件路径?

希望在遥远的将来,这篇文章可以帮助人们避免浪费生命中的一个小时。