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

C#以编程方式创建目录快捷方式并不总是有效,c#,directory,shortcut,C#,Directory,Shortcut,我试图通过编程创建一个目录的快捷方式。我已经找到了许多例子,但没有一个能真正起作用 我在生成的快捷方式的属性中观察到三种不同的结果: 文件的快捷方式类型被指定为“快捷方式(.lnk)”,这会导致弹出“打开方式”对话框,要求我为其附加扩展名 “文件”属性的快捷方式类型被指定为“文件”,当双击时,该属性完全不起任何作用 或者最后一个当然是我最喜欢的。。。“文件”属性的快捷方式类型被指定为“文件文件夹”,其工作方式与应有的相同 这是我目前正在使用的代码。。。我试过这种方法的一些变体 bool IsEx

我试图通过编程创建一个目录的快捷方式。我已经找到了许多例子,但没有一个能真正起作用

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

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

  • “文件”属性的快捷方式类型被指定为“文件”,当双击时,该属性完全不起任何作用

  • 或者最后一个当然是我最喜欢的。。。“文件”属性的快捷方式类型被指定为“文件文件夹”,其工作方式与应有的相同

  • 这是我目前正在使用的代码。。。我试过这种方法的一些变体

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

    试试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/");
    }
    

    谢谢大家的帮助。。。我想出来了。我不想把它作为一个答案发布,但我想以防万一其他人碰巧遇到同样的问题。。。尽管我对自己的疏忽感到羞怯


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

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

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

  • 创建快捷方式时,目标路径必须指向文件夹(如上所述)
  • 但同时-似乎提供的目标路径也必须规范化-例如通过
    path.GetFullPath(可能是规范化路径)
    请参见

  • 希望这能帮助遥远的将来的人避免浪费一个小时的生命。

    我怀疑appPath是提供这么多信息的罪魁祸首。使用代码的后半部分(并使用我自己的set.ico文件),我总是得到第三个结果。当目标路径不存在时,我才获得第一个结果。如果您可以缩小结果不同的条件,这可能会有所帮助这里是appPath:private string appPath=System.AppDomain.CurrentDomain.BaseDirectory;区别在于,如果我通过InstallShield或VS在本地安装此应用程序,它会将图标文件安装在与appPath相同的目录中。。。但当我出于某种原因运行ClickOnce纯Web安装时,它会在appPath目录中添加另一个bin和Debug文件夹。。。因此,如果在appPath中找不到if语句,则在扩展目录中查找。还要注意的是,图标总是显示在快捷方式中,因此我知道它正在找到正确的路径。我很想向下投票,因为你要求向上投票。我敢肯定,除了明显的网络失礼之外,在某些地方有一条规则禁止这样做。我很抱歉。。。我不知道这是否有帮助,但我真的很犹豫问。我请求它的唯一原因是我经常使用这个论坛,因为我大部分时间都能很好地快速回答我的问题。。。我从其他开发人员那里获得了一些非常好的代码,我总是感到很难过,因为我无法更新它们。。。几乎我遇到的每一个问题都已经得到了回答,所以我从来没有真正获得过信任活动,尽管我说过我每周至少有5天在这个论坛上……OP提出了什么问题?