【问题标题】:Copying .lnk onto 64 bit Windows changes shortcut contents将 .link 复制到 64 位 Windows 会更改快捷方式内容
【发布时间】:2017-02-26 17:30:06
【问题描述】:

我们使用 SCCM 2012 R2、server 2012 服务器和 Windows 7 客户端。学生机通常是 Win7-64。

我创建了一个脚本来安装 Eclipse,基本上,创建一个目录并复制文件(Eclipse 没有安装程序并且是 32 位软件)。在我的脚本中,为了让学生的生活更美好,我想将快捷方式放在桌面和开始菜单中。代码是这样的:

REM Put icon on desktop
copy "Eclipse Mars (64).lnk" "C:\Users\Public\Desktop"
rename "C:\Users\Public\Desktop\Eclipse Mars (64).lnk" "C:\Users\Public\Desktop\Eclipse Mars.lnk"

但是,当链接出现在客户端桌面上时,“C:\Program Files (x86)\Eclipse\eclipse.exe”的正确目标更改为“C:\Program Files\Eclipse\eclipse.exe”并且因此不起作用(与 Start In 相同)。

是什么将快捷方式内容更改为错误的 Program Files 目录?

最后,虽然我在此示例中提到了 Eclipse,但它发生在任何 32 位快捷方式脚本上到 64 位机器上。

【问题讨论】:

  • 如果您想像这样使用带有 sccm 的批处理文件,您可能必须创建一个应用程序而不是一个包/程序。程序总是使用 32 位主机执行,这会导致您的问题。有几种解决方法。要确定哪个最适合您,我需要知道您是否会考虑使用不同的脚本语言(vbs 或 powershell),以及您的语言中的窗口是否与名称不同于“程序文件”的程序文件有连接(如果您在资源管理器中查看所有文件,基本上如果您有一个带有小锁的第三个程序文件文件夹)
  • @Syberdoor:您似乎在提供替代解决方案,甚至没有分析这个具体问题。简单的复制操作后,.lnk 文件中的目标位置发生了什么变化?为什么这不会发生在 VBScript 或 PowerShell 中?
  • @IInspectable 如果你复制它,Windows 可以更改 lnk 的目标。我已经看过几次了,所以我假设这就是这里发生的事情(可能不是。相反,目标是通过环境变量保存的,然后只是简单地展开)。我不知道你是怎么得出我没有分析这个的结论,因为剧本超级简单?有一个复制命令不改变文件,分析结束?无论如何,其他一切都是猜测。使用 Vbscript 和 powershell,您可以创建 lnk 而不是复制它,这是不同的。您可以使用每个位的单独路径
  • @Syberdoor:“如果你复制它,Windows 可以更改 lnk 的目标。我已经看过几次了” - 这不是问题分析。为什么会改变目标?在什么条件下?如何预防?对这些问题的回答构成分析。虽然从头开始生成 .lnk 文件可能是一种实用的解决方法,但解释链接目标更改的原因会更有帮助。
  • 这是疯狂的猜测:可能链接目标在复制时被更改,由于Distributed Link Tracking and Object Identifiers。虽然我只听说它以相反的方式工作(即链接可以解析目标,即使重命名或移动,请参阅IShellLink::Resolve),当链接本身移动时,Shell 也可能会尝试调整目标。同样,这只是猜测。

标签: batch-file sccm windows64


【解决方案1】:

我做了一些研究,你应该试试这个:

ren "Eclipsce Mars (64).lnk" eclm.tmp
copy "eclm.tmp" "C:\Users\Public\Desktop"
ren "C:\Users\Public\Desktop\eclm.tmp" "C:\Users\Public\Desktop\Eclipse Mars.lnk"
ren eclm.tmp "Eclipsce Mars (64).lnk"

我做了什么:

  1. 将原来的.lnk重命名为eclm.tmp
  2. 已将eclm.tmp 复制到Desktop
  3. Desktop\eclm.tmp 重命名为Eclipse Mars.lnk
  4. 将原来的 .lnk 重命名为正常。

应该绕过 Windows 更改 .lnk 文件内容的倾向。

如果可行,请在 cmets 和投票柜台告诉我!
~CSS

【讨论】:

    【解决方案2】:

    您可以使用可以从主批处理文件调用的简单 VBS 脚本创建真正的 Windows 快捷方式。

    主批处理文件:

    REM Put icon on desktop
    call "Create Shortcut.vbs" "C:\Users\Public\Desktop\Eclipse Mars (64).lnk" "C:\Program Files (x86)\eclipse-mars\eclipse.exe" "C:\Program Files (x86)\eclipse-mars"
    

    VBS“创建快捷方式.vbs”:

    ' Check the number of parameters
    If 3 <> WScript.Arguments.Count Then
        WScript.Echo "Please call this file using the following parameters:"
        WScript.Echo
        WScript.Echo "   LINK PATH   - Absolute path where the shortcut file will be created"
        WScript.Echo "   TARGET_PATH - Absolute path of the target program"
        WScript.Echo "   WORKING_DIR - Working directory used by this shortcut"
        WScript.Quit(1)
    End If
    
    strLinkPath   = WScript.Arguments(0)
    strTargetPath = WScript.Arguments(1)
    strWorkingDir = WScript.Arguments(2)
    
    set oShell = WScript.CreateObject("WScript.Shell")
    
    set oShellLink = oShell.CreateShortcut(strLinkPath)
    oShellLink.TargetPath       = sTargetPath
    oShellLink.WorkingDirectory = strWorkingDir
    oShellLink.WindowStyle      = 1
    oShellLink.Description      = ""
    oShellLink.IconLocation     = strTargetPath
    oShellLink.Save
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-05-28
      • 1970-01-01
      • 2011-03-03
      • 2014-10-06
      • 2018-07-13
      • 2011-10-11
      • 2022-06-18
      • 2021-12-15
      相关资源
      最近更新 更多