【问题标题】:Windows Shortcuts Created Programmatically Don't Work以编程方式创建的 Windows 快捷方式不起作用
【发布时间】:2016-12-21 22:22:00
【问题描述】:

我使用 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 文件,我不确定这是否重要。

【问题讨论】:

  • 右键单击以编程方式制作的快捷方式,然后将“目标”和“开始”字段与您手动制作的有效字段进行比较。
  • 尝试上述链接中提供的解决方案。 (请记住关于WshShellWshShellClass 的.NET 4.0 参考的注释。解决方案适用于c#。
  • @Quantic - 完全正确。我之前确实仔细比较了属性,但我忽略了现场的开始。把这个作为答案,我可以接受。需要设置的属性是快捷方式对象的WorkingDirectory。

标签: c# windows powershell shortcuts


【解决方案1】:

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-10-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-04-23
    • 2023-04-02
    • 2015-10-30
    • 1970-01-01
    相关资源
    最近更新 更多