Код VB.NET / C # для доступа к целевому пути к файлам ссылок (lnk) приводит к неправильным путям - PullRequest
2 голосов
/ 26 февраля 2012

Я нашел этот код:

    Public Shared Function GetLnkTarget(ByVal lnkPath As String) As String
    Dim shl = New Shell32.Shell()
    ' Move this to class scope
    lnkPath = System.IO.Path.GetFullPath(lnkPath)
    Dim dir = shl.[NameSpace](System.IO.Path.GetDirectoryName(lnkPath))
    Dim itm = dir.Items().Item(System.IO.Path.GetFileName(lnkPath))
    Dim lnk = DirectCast(itm.GetLink, Shell32.ShellLinkObject)
    Return lnk.Target.Path
    End Function

Он работает для некоторых файлов .lnk, но, например, если я добавлю ссылку на рабочий стол Skype.exe, он выдаст:

C:\Windows\Installer\{...}\SkypeIcon.exe

Isесть ли исправление для этого?

Ответы [ 2 ]

1 голос
/ 20 июня 2013

Попробуйте это:

Function GetTargetPath(ByVal FileName As String)

    Dim Obj As Object
    Obj = CreateObject("WScript.Shell")

    Dim Shortcut As Object
    Shortcut = Obj.CreateShortcut(FileName)
    GetTargetPath = Shortcut.TargetPath


End Function

    Private Sub Teste_Load(sender As Object, e As EventArgs) Handles MyBase.Load 

MsgBox(GetTargetPath("C:\ProgramData\Microsoft\Windows\Start Menu\BitTorrent.lnk"))

'here you chose the location of .lnk file

End Sub
0 голосов
/ 11 августа 2017

CreateShortcut () не работает должным образом с определенными ярлыками, которые имеют неактивную цель в свойствах, такими как Adobe Reader и Microsoft Word.В конечном итоге путь к каталогу находится в каталоге c: \ windows \ installer (icon?).

...