8

我正在尝试以编程方式创建目录的快捷方式。我找到了很多例子,但似乎没有一个能真正奏效。

我在生成的快捷方式的属性中观察到三种不同的结果:

  1. 文件的快捷方式类型被指定为“快捷方式(.lnk)”,这会导致弹出“打开方式”对话框,要求我为其附加扩展名。

  2. 文件属性的快捷方式类型被指定为“文件”,双击时绝对不会执行任何操作。

  3. 或者最后,这当然是我最喜欢的......文件属性的快捷方式类型被分配为:“文件夹”,它应该像它应该的那样工作。

这是我目前正在使用的代码......我已经尝试了一些变体。

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();
4

3 回答 3

4

谢谢大家的帮助...我想通了。我不想将其发布为答案,但想以防万一其他人碰巧遇到同样的问题……尽管我对自己的疏忽感到羞愧。

事实证明,代码没有任何问题。Panhandel 在发表声明时给了我一条线索,告诉我在哪里可以找到解决方案:“我只在目标路径不存在时才获得第一个结果。” 因为他总是得到正确的结果,而且他只得到了我在目录不存在时得到的结果......我意识到问题可能是我在一行中以编程方式创建目录,然后在下一行创建图标.. . 我需要给系统更多时间来完全创建目录

于 2013-06-19T16:24:18.057 回答
2

试试 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/");
}
于 2013-06-11T13:33:58.457 回答
1

我在这个问题上有一个轻微的变化......

我最终发现了一个额外的条件:

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

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

于 2019-10-01T22:18:30.143 回答