如何阻止Windows快捷方式更新其路径?


24

在开发产品时,我的测试设备同时安装了多个版本的应用程序。但是,为了获得我的应用程序正在使用的绝对路径,我需要切换或重命名文件夹,以便要测试的版本具有正确的路径,例如C:\Program Files\My Company\My App\My App.exe。我已经针对此路径创建了快捷方式,但是如果当前没有任何版本具有该路径时打开此快捷方式,则该快捷方式将自动更新,以为文件已永久移动。这导致了无声的故障,直到我发现正在发生的事情。直到现在,我才知道这是Windows快捷方式的功能。

所以我的问题很简单。有什么办法可以关闭此功能?从全局上讲是好的,但按快捷方式解决会更好。

使用批处理文件而不是快捷方式是一种解决方案,但是我想知道是否有任何方法可以在仍使用快捷方式的情况下使此工作正常进行。

我正在使用Windows 10 Home和Windows 7 Home。


10
我过去所做的是使用.bat带有简单命令(例如)的批处理文件()start "" "C:\path\to\file.exe"
鲍勃·鲍勃(Bob)

1
您是否尝试过创建符号链接(使用mklink命令)而不是.lnk文件?还是那些也得到更新?
JAB

1
@JAB符号链接不应该更新,但是有某些缺点(需要admin privs,不能传递参数,等等)。尽管如果这些都不成问题,它们会很好地工作。
鲍勃”

3
我以为将快捷方式设置为只读是可以的(我确信它曾经可以使用),但是经过测试,我发现它不起作用。这是因为快捷方式未重写。运行快捷方式时找到目标。只是没有人尝试过。
克里斯·H

1
如我上面所说,@ PetSerAl不起作用。
克里斯H

Answers:


13

您可以使用PowerShell!这个小脚本重整了LNK文件,以产生与使用经典shortcut实用程序相同的效果。

$linkfile = Resolve-Path $args[0]
$bytes = [IO.File]::ReadAllBytes($linkfile)
$bytes[0x16] = $bytes[0x16] -bor 0x36
[IO.File]::WriteAllBytes($linkfile, $bytes)

要使用它,请将该文本另存为.ps1文件,例如notrack.ps1。如果尚未安装,请按照PowerShell标签Wiki的“启用脚本”部分中说明进行操作。然后,您可以从PowerShell提示符运行它:

.\notrack.ps1 C:\path\to\my\shortcut.lnk

以这种方式调整的快捷方式在目标移动时不会改变。如果这样的快捷方式损坏,则尝试打开它时将什么也不会发生。

我从LNK格式的48页Microsoft PDF中收集了脚本中使用的二进制数学。


25

停止并禁用该服务:分布式链接跟踪客户端(TrkWks)。

分布式链接跟踪在链接到NTFS卷上的文件(例如外壳快捷方式)的情况下跟踪链接。如果该文件被重命名,移动到同一台计算机上的另一个卷,移动到另一台计算机或在其他类似情况下移动,则Windows将使用分布式链接跟踪来查找该文件。

来源:分布式链接跟踪-Microsoft支持


好主意,但值得注意的是它没有用。即使路径多了一个目录,快捷方式仍会找到文件。
凯尔·德莱尼

您确定服务已停止吗?停止DLTC服务后,我移动或重命名了可执行文件。运行快捷方式时,出现“快捷方式问题”错误,提示目标丢失,并提示删除快捷方式。
史蒂文

10
“找到正确的目标”功能可以追溯到Windows 9x系列,并且早于Windows的NT版本。Windows 9x上不存在DLT。这并不是说DLT无关紧要;如果有助于查找快捷方式目标,Windows 使用DLT。
MSalters

2
@Steven是的,我确定服务已关闭。在Windows 10中,我进入“服务”,找到“分布式链接跟踪客户端”,单击“停止”按钮,重新启动计算机,然后再次检查该服务。有一个“开始”按钮,该服务未显示正在运行。快捷方式仍会更新。
凯尔·德莱尼

8

使用shortcut.exe命令Option -s

shortcut: [-? -h -f -c -r -s] [[-t] target [[-n] name]] [-d working directory]
        [-a Arguments] [-i Iconfile] [-x Icon index] [-u {all|[natdix]}]
        [-l logfile]

  -? -h        This help
  -f           Force overwrite of an existing short cut
  -c           Change existing shortcut
  -s           Make shortcut non tracking (Stupid)
  -r           Resolve broken shortcut
  -t target    Specifies the target of the shortcut
  -n name      Specifies the file name of the shortcut file
  -d directory Specifies the directory name to start the application in
  -a arguments Specifies the arguments passed when the shortcut is used
  -i iconfile  Specifiles the file the icon is in
  -x index     Specifies the index into the icon file
  -u [spec]    Dumps the contents of a shortcut. 'all' is the same as 'natdix'
               but the letters of 'natdix' can be specified to display specific
               fields in the shortcut (repeats allowed, and order followed)
  -l logfile   record error messages in specified file

4
遗憾的是,shortcut.exe不再可用。
Daniel B

@DanielB是的,我忘了我已经在某些Windows版本上拯救了shortcut.exe。
Sunzi

2
@Daniel您知道哪个版本的Windows有它吗?对某些人可能有用。
gronostaj


4

您可以启用以下GPO:

用户配置\管理模板\开始菜单和任务栏\解析外壳快捷方式时不要使用基于搜索的方法

相应的注册表项: HKCU\Software\Microsoft\Windows\CurrentVersion\Policies\Explorer\NoResolveSearch

用户配置\管理模板\开始菜单和任务栏\解析外壳快捷方式时不要使用基于跟踪的方法

相应的注册表项:

HKCU\Software\Microsoft\Windows\CurrentVersion\Policies\Explorer\NoResolveTrack

用户配置\管理模板\ Windows组件\文件资源管理器\在漫游过程中不跟踪外壳快捷方式

相应的注册表项: HKCU\Software\Microsoft\Windows\CurrentVersion\Policies\Explorer\LinkResolveIgnoreLinkInfo


如何启用GPO?在哪里可以找到用户配置?
凯尔·德莱尼

在Windows 10上,您可以右键单击“开始”按钮->运行并编写:gpedit.msc->单击“确定”,然后您将能够找到用户配置等...,也可以创建我指定的注册表项(类型:DWORD,值为1)
Swisstone '17

我有一个错误。Windows无法找到gpedit.msc。
凯尔·德莱尼

单击确定,因此您必须在注册表中手动创建密钥。如果您不知道该怎么做,我创建了一个可以导入的.reg文件:pastebin.com/KdPYFwff只是将内容复制并粘贴到一个必须以“ .reg”扩展名结尾的新文件中(不是)。 txt)并双击
Swisstone

谢谢。我做到了,重新启动了计算机,并使用regedit验证了注册表项是否已就位。快捷方式仍会更新。
凯尔·德莱尼
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.