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

时间:2016-12-21 22:22:00

标签: c# windows powershell shortcuts

我已经使用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()

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

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

1 个答案:

答案 0 :(得分:0)

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

您可以使用@"Resources\Icons\myicon.ico"测试相对路径扩展到的内容,并且可以使用@"C:\Users\me\Desktop\Resources\Icons\myicon.ico查看当前目录。从没有Start In集的桌面启动快捷方式我看到工作目录为我的桌面,这意味着@"C:\Program Files\MyProgram\Resources\Icons\myicon.ico"将扩展为{{1}}这是不好的,因为图标在其他地方如{{1} }。