将 .link 复制到 64 位 Windows 会更改快捷方式内容

     2023-02-16     24

关键词:

【中文标题】将 .link 复制到 64 位 Windows 会更改快捷方式内容【英文标题】:Copying .lnk onto 64 bit Windows changes shortcut contents 【发布时间】: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 也可能会尝试调整目标。同样,这只是猜测。 【参考方案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"

我做了什么:

    将原来的.lnk重命名为eclm.tmp 已将eclm.tmp 复制到DesktopDesktop\eclm.tmp 重命名为Eclipse Mars.lnk 将原来的 .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

【讨论】:

libcurl.dll系统找不到

...一个试过去了。四、直接拷贝该文件到系统目录里:1、Windows95/98/Me等系统,将dll复制到C:\Windows\System目录下。2、WindowsNT/2000等NT系统,将dll复制到C:\WINNT\System32目录下。3、WindowsXP/WIN7/Vista系统(64位系统对应64位dll文件... 查看详情

将 32 位 Windows 驱动程序移植到 64 位 Windows

】将32位Windows驱动程序移植到64位Windows【英文标题】:Port32-BitWindowsdriverto64-BitWindows【发布时间】:2011-03-1122:24:25【问题描述】:由于我们的应用程序在全屏模式下运行,我们开发了一个键盘挂钩驱动程序来禁用用户对ALT+F4、CTRL... 查看详情

win10libcurl.dll丢失怎么办

...一个试过去了。四、直接拷贝该文件到系统目录里:1、Windows95/98/Me等系统,将dll复制到C:\Windows\System目录下。2、WindowsNT/2000等NT系统,将dll复制到C:\WINNT\System32目录下。3、WindowsXP/WIN7/Vista系统(64位系统对应64位dll文件... 查看详情

将 32 位 COM DLL 注册到 64 位 Windows 7

】将32位COMDLL注册到64位Windows7【英文标题】:Register32bitCOMDLLto64bitWindows7【发布时间】:2011-03-2706:33:37【问题描述】:我有一个32位COM组件DLL,这个DLL是用Delphi编写的。它是一个Win32DLL。我想在.NET平台上的VisualC#项目中使用这个DLL... 查看详情

系统提示缺少libeay32.dll和ssleay32.dll怎么办

...一个试过去了。四、直接拷贝该文件到系统目录里:1、Windows95/98/Me等系统,将dll复制到C:\Windows\System目录下。2、WindowsNT/2000等NT系统,将dll复制到C:\WINNT\System32目录下。3、WindowsXP/WIN7/Vista系统(64位系统对应64位dll文件... 查看详情

电脑显示“无法启动此程序”丢失.dll文件怎么办,要怎么样才能正常运行

...一个试过去了。四、直接拷贝该文件到系统目录里:1、Windows95/98/Me等系统,将dll复制到C:\Windows\System目录下。2、WindowsNT/2000等NT系统,将dll复制到C:\WINNT\System32目录下。3、WindowsXP/WIN7/Vista系统(64位系统对应64位dll文件... 查看详情

windows系统下运行某些程序时缺少“msflxgrd.ocx”的解决方法

...s://www.ocxme.com/files/msflxgrd_ocx64位系统将文件复制/剪切到C:\Windows\SysWOW64目录,32位系统就复制到C:\Windows\SYSTEM32目录。64位系统复制下面的一段命令regsvr32 c:\Win 查看详情

为 32 位 exe 加载 32 位库时,Windows 7 64 位路径不正确

】为32位exe加载32位库时,Windows764位路径不正确【英文标题】:windows764bitsincorrectPATHwhenloading32bitslibraryfor32bitsexe【发布时间】:2011-11-1112:03:39【问题描述】:我有一个依赖于libeay32.dll的exe。两者都编译为32位。我已将exe复制到C:\\P... 查看详情

win7的64位的halcon10.0的dll损坏,求助

...ll文件记录下来,到网上搜索这个dll文件进行下载。2、在Windows7旗舰版系统中分成32位和64位,在选择安装dll文件的时候一定要选择64位系统的,3、如果VC运行的时候dll数量非常多,所以如果要安装大量dll文件的时候就需要重新安... 查看详情

每次点qq都会弹出这个,重新下载libcurl.dll复制到syswow64目录也不行(win764位)求大神帮帮忙

...骤操作:一、解压后直接拷贝该文件到系统目录里:1、Windows95/98/Me系统,复制到C:\Windows\System目录下。2、WindowsNT/2000系统,复制到C:\WINNT\System32目录下。3、WindowsXP/WIN7/Vista系统,复制到C:\Windows\System32目录下。4... 查看详情

如何安装后缀为ocx的控件

1、首先将你的oxc控件直接拖动到C:\\Windows\\SysWOW64目录。2、复制完成后,在C:\\Windows\\SysWOW64目录确认文件是否被正确复制。3、然后需要右击系统左下角的windows徽标“也就是图中四个方块的图标”,在弹出的列表中选择“WindowsPowe... 查看详情

libcurl.dll怎么恢复

...系统的。使用方法:1.直接拷贝该文件到系统目录里:1)Windows95/98/Me系统,将此文件复制到c:\Windows\System目录下。2)WindowsNT/2000系统,将此文件复制到c:\WINNT\System32目录下。3)WindowsXP/WIN7系统,将此文件复制到c:\Windows&#... 查看详情

将 16 位复制到内存位置

】将16位复制到内存位置【英文标题】:Copying16bittotomemorylocation【发布时间】:2019-10-1502:45:15【问题描述】:我现在在大学学习机器架构课程,我们开始学习组装。我们有一个问题说:下面的x86-64汇编指令会将16位从A寄存器复制... 查看详情

如何测试 Windows DLL 文件以确定它是 32 位还是 64 位? [复制]

】如何测试WindowsDLL文件以确定它是32位还是64位?[复制]【英文标题】:HowcanItestaWindowsDLLfiletodetermineifitis32bitor64bit?[duplicate]【发布时间】:2010-10-0411:02:32【问题描述】:我想编写一个测试脚本或程序,断言给定目录中的所有DLL文... 查看详情

用于 64 位 Windows 7 机器的 Microsoft ODBC 驱动程序的替代品(将 Excel 数据获取到 SQL)

】用于64位Windows7机器的MicrosoftODBC驱动程序的替代品(将Excel数据获取到SQL)【英文标题】:AlternativetoMicrosoftODBCDriversfor64-bitWindows7machine(getExceldatatoSQL)【发布时间】:2015-03-2416:50:58【问题描述】:问题:我一直在尝试获取一个简... 查看详情

计算机丢失duilib.dll,尝试重新安装该程序以解决问题,怎么弄

...文件。6、32位的系统很简单,直接将文件复制到“C:\Windows\System32”下就可以了。64位的可能要麻烦些,有时候复制到“C:\Windows\Syswow64”中打开软件或者游戏依然报错,这时你就要找到64位系统下的“C:\Windows\Syst... 查看详情

尝试在 64 位 Windows-7 中从 c# 应用程序将 datagridview 导出到 OpenOffice Calc 时出现 cli 程序集错误

】尝试在64位Windows-7中从c#应用程序将datagridview导出到OpenOfficeCalc时出现cli程序集错误【英文标题】:cliassemblyerrorwhiletryingtoexportdatagridviewtoOpenOfficeCalcfromc#applicationin64bitWindows-7【发布时间】:2015-02-2508:00:35【问题描述】:我有一个... 查看详情

解决windows丢失d3dcompiler_33.dll问题

...置"找到安装目录,将文件复制进去。或者将文件复制到Windows系统目录,这个需要注意电脑的系统是32位还是64位,如果是32位的系统,那就将本站下载32位的dll文件放到“C:/Windows/System32”这个文件夹里面,如果是64位的系统,那就... 查看详情