【发布时间】: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