如何打开 Windows 快捷方式?(.lnk 文件)

如何打开 Windows 快捷方式?(.lnk 文件)

我想在 ubuntu 上打开一些来自 Windows 的文件。我转到 Windows 桌面并找到了我需要的文件,但它们都是 .lnk。Ubuntu 无法识别这些文件,所以我无法追溯它们的来源并使用 wine 打开它们。我使用的是 15.10 版本,但我很快就会升级到 16.04 版本。

答案1

在 Ubuntu 上,使用 Windows 快捷方式文件 (又名 .lnk文件或 外壳链接) 的缺点是它们可能指向 Ubuntu 上不存在的路径,例如C:\Program Files。相对路径可能类似,但存在路径分隔符问题(\/)、不区分大小写的语义(在 Windows 上,“Program Files”和“program files”是同一个文件夹)和编码问题(如果路径包含除 ASCII 之外的字符怎么办?)。因此,即使 Ubuntu 上的文件管理器支持 专有格式 获取文件路径,但这并不意味着快捷方式可以在 Ubuntu 上运行,因为路径并不总是可移植的。

这就是说, file 命令将为您提供有关链接文件的基本信息。

$ file 'Program Files - Shortcut.lnk'
Program Files - Shortcut.lnk: MS Windows shortcut, Item id list present, Points to a file or directory, Has Relative path, Read-Only, Directory, ctime=Tue Jul 14 09:20:08 2009, mtime=Wed Apr 24 03:36:46 2019, atime=Wed Apr 24 03:36:46 2019, length=12288, window=hide

如需更详细信息,您可以使用 lnkinfo 程序来自 liblnk-utils 包裹。查找“本地路径”和“相对路径”来追踪它们指向的位置。下面是输出示例,lnkinfo以说明我的意思:

$ lnkinfo 'Program Files - Shortcut.lnk'
lnkinfo 20171101

Windows Shortcut information:
        Contains a link target identifier
        Contains a relative path string

Link information:
        Creation time           : Jul 14, 2009 03:20:08.555426400 UTC
        Modification time       : Apr 23, 2019 21:36:46.017274100 UTC
        Access time         : Apr 23, 2019 21:36:46.017274100 UTC
        File size           : 12288 bytes
        Icon index          : 0
        Show Window value       : 0x00003000
        Hot Key value           : 12288
        File attribute flags        : 0x00000011
                Is read-only (FILE_ATTRIBUTE_READ_ONLY)
                Is directory (FILE_ATTRIBUTE_DIRECTORY)
        Drive type          : Fixed (3)
        Drive serial number     : 0x0e1909c6
        Volume label            : Local Disk
        Local path          : C:\Program Files
        Relative path           : ..\..\..\Program Files

Link target identifier:
        Shell item list
                Number of items     : 3

        Shell item: 1
                Item type       : Root folder
                Class type indicator    : 0x1f (Root folder)
                Shell folder identifier : 20d04fe0-3aea-1069-a2d8-08002b30309d
                Shell folder name   : My Computer

        Shell item: 2
                Item type       : Volume
                Class type indicator    : 0x2f (Volume)
                Volume name     : C:\

        Shell item: 3
                Item type       : File entry
                Class type indicator    : 0x31 (File entry: Directory)
                Name            : PROGRA~1
                Modification time   : Apr 23, 2019 21:36:48
                File attribute flags    : 0x00000011
                        Is read-only (FILE_ATTRIBUTE_READ_ONLY)
                        Is directory (FILE_ATTRIBUTE_DIRECTORY)
        Extension block: 1
                Signature       : 0xbeef0004 (File entry extension)
                Long name       : Program Files
                Localized name      : @shell32.dll,-21781
                Creation time       : Jul 14, 2009 03:20:10
                Access time     : Apr 23, 2019 21:36:48
                NTFS file reference : MFT entry: 878, sequence: 1



Distributed link tracking data:
        Machine identifier      : nathaniel-pc
        Droid volume identifier     : b2638d5e-f5b8-480c-bda0-fdb25ab91131
        Droid file identifier       : 968b84a2-a646-11e9-a124-0021cc6948e3
        Birth droid volume identifier   : b2638d5e-f5b8-480c-bda0-fdb25ab91131
        Birth droid file identifier : 968b84a2-a646-11e9-a124-0021cc6948e3

答案2

默认情况下,Windows 中的程序安装到以下两个位置之一:

C:\Program Files
C:\Program Files (x86)

(仅当您安装 64 位时才会存在第二个。)

在 Ubuntu 上,这些路径转换为:

WindowsDriveName >> /Program Files
WindowsDriveName >> /Program Files (x86)

您将能够在任一文件夹中找到您的程序。

记住:许多 Windows 程序只能在安装它们的环境中运行。这意味着在 Ubuntu 中打开已安装在 Windows 中的程序可能无法正常工作,甚至根本无法正常工作。

最好的办法就是使用 Wine 运行您想要的应用程序的安装程序,这样它在 Ubuntu 中就有自己的环境。

答案3

这是安装 Epic Games Launcher 时创建的桌面条目的示例,这只是一个示例。

[Desktop Entry]
Comment[en_US]=
Comment=
Exec=env WINEPREFIX="/home/whitequill/Games/epic-games-store" wine C:\\\\Users\\\\whitequill\\\\AppData\\\\Roaming\\\\Microsoft\\\\Windows\\\\Start\\ Menu\\\\Programs\\\\Epic\\ Games\\ Launcher.lnk
GenericName[en_US]=
GenericName=
Icon=ED2E_EpicGamesLauncher.0
MimeType=
Name[en_US]=Epic Games Launcher
Name=Epic Games Launcher
Path=/home/whitequill/Games/epic-games-store/drive_c/Program Files (x86)/Epic Games/Launcher/Portal/Binaries/Win64/
StartupNotify=true
StartupWMClass=EpicGamesLauncher.exe
Terminal=false
TerminalOptions=
Type=Application
X-DBUS-ServiceName=
X-DBUS-StartupType=
X-KDE-SubstituteUID=false
X-KDE-Username=

从示例中可以看出,Exec 下的命令是:

Exec=env WINEPREFIX="/home/whitequill/Games/epic-games-store" wine C:\\\\Users\\\\whitequill\\\\AppData\\\\Roaming\\\\Microsoft\\\\Windows\\\\Start\\ Menu\\\\Programs\\\\Epic\\ Games\\ Launcher.lnk

这显示了从桌面脚本执行 lnk 文件的过程,就像执行 lnk 文件一样。我建议遵循以下信息: Ubuntu 20.04 - WineHQ 6.0 - 为程序创建 .lnk 快捷方式 其中有以下脚本:

lnk () {
        cat <<EOF > /tmp/shortcut.vbs
    Set FSO = CreateObject("Scripting.FileSystemObject")
    TargetPath = FSO.GetAbsolutePathName(WScript.Arguments(0))
    WorkingDirectory = FSO.GetParentFolderName(TargetPath)
    Set lnk = CreateObject("WScript.Shell").CreateShortcut(WScript.Arguments(1))
        lnk.TargetPath = TargetPath
        lnk.WorkingDirectory = WorkingDirectory
        lnk.Save
    EOF
        wine wscript '//B' 'Z:\tmp\shortcut.vbs' "$@" 2> /dev/null
        local exit_code=$?
        sync; rm -f /tmp/shortcut.vbs; sync
        return $exit_code
    }

以下用于创建 lnk 文件的脚本用于创建新的 lnk,因为 lnk 可能无法正常工作。在此示例中,我尝试运行 Epic Games 商店,我需要创建一个新的链接,如下所示:

lnk 'Z:\home\whitequill\Games\epic-games-store\drive_c\Program Files (x86)\Epic Games\Launcher\Portal\Binaries\Win64\EpicGamesLauncher.exe' 'Z:\home\whitequill\Games\epic-games-store\drive_c\Users\whitequill\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Epic Games Launcher.lnk'

这就是您可以创建运行 Windows 快捷方式 (.lnk) 文件的桌面条目的方法。

相关内容