Windows 以编程方式创建的快捷方式不起作用

Windows Shortcuts Created Programmatically Don't Work

我已经使用 C# 和 Powershell 创建了快捷方式,但是在代码中创建时它们不起作用。我点击快捷方式,光标显示 PC 正在思考一秒钟,然后什么也没有发生。这是我使用的 Powershell 代码:

$currPath = Split-Path -Parent -Path $MyInvocation.MyCommand.Definition
$tgtPath = ($currPath + "\bin\MyApp.exe")
$scutPath = ([Environment]::GetFolderPath("Desktop") + "\MyApp.lnk")
$wShell = New-Object -ComObject WScript.Shell
$scut = $wShell.CreateShortcut($scutPath)
$scut.TargetPath = $tgtPath
$scut.Save()

C# 代码使用 IWshRuntimeLibrary 进行基本相同的思考。这个小脚本基本上只是在某人下载我的小独立可执行文件后在他们的桌面上创建一个快捷方式。我可以手动创建快捷方式,一切正常。为什么我不能通过代码实现?

我在测试过程中在桌面上创建了几个同名的快捷方式和 .url 文件,我不确定这是否重要。

您通常必须确保分配了 WorkingDirectory,否则您的程序的 Environment.CurrentDirectory 将继承您调用快捷方式的目录。您的程序可能由于未通过使用相对路径找到资源而关闭,例如图标:_notifyIcon.Icon = new System.Drawing.Icon(@"Resources\Icons\myicon.ico"); 使用带有空白的快捷方式时会崩溃 WorkingDirectory 当快捷方式从进程启动时与您的 .exe 所在位置不同的工作目录(例如,当您双击快捷方式时读取您的快捷方式并启动您的程序的资源管理器进程)。

您可以使用Path.GetFullPath(string relativePath)测试相对路径扩展到什么,您可以使用Environment.CurrentDirectory查看当前目录。从没有开始设置的桌面启动快捷方式我将工作目录视为我的桌面,这意味着 @"Resources\Icons\myicon.ico" 将扩展为 @"C:\Users\me\Desktop\Resources\Icons\myicon.ico 这不好,因为图标位于其他地方,例如 @"C:\Program Files\MyProgram\Resources\Icons\myicon.ico".