Como faço para impedir que um atalho do Windows atualize seu caminho?


24

Durante o desenvolvimento do meu produto, meu dispositivo de teste possui várias versões do aplicativo instaladas ao mesmo tempo. No entanto, para obter os caminhos absolutos que meu aplicativo está usando para funcionar, preciso mudar ou renomear as pastas para que a versão que eu quero testar tenha o caminho certo, digamos C:\Program Files\My Company\My App\My App.exe. Fiz um atalho que tem como alvo esse caminho, mas se esse atalho for aberto quando nenhuma das versões tiver esse caminho, o atalho será atualizado automaticamente, pensando que o arquivo foi movido permanentemente. Isso causou falhas silenciosas até eu descobrir o que estava acontecendo. Eu não sabia que esse era um recurso dos atalhos do Windows até agora.

Então, minha pergunta é simples. Existe alguma maneira de desativar esse recurso? Globalmente, é bom, mas uma solução por atalho seria melhor.

Usar um arquivo em lotes em vez de um atalho é uma solução, mas estou me perguntando se há alguma maneira de fazer isso funcionar enquanto ainda estiver usando um atalho.

Estou usando o Windows 10 Home e o Windows 7 Home.


10
O que eu fiz no passado é usar um arquivo em lotes ( .bat) com um comando simples, por exemplo start "" "C:\path\to\file.exe".
19417 Bob

1
Você já tentou criar um link simbólico (usando o mklinkcomando) em vez de um .lnkarquivo? Ou eles também são atualizados?
JAB

1
Os links simbólicos do @JAB não devem ser atualizados, mas têm certas desvantagens (exigem privilégios de administrador, não podem passar argumentos etc.). Embora eles funcionem bem se isso não for um problema.
19417 Bob

3
Eu pensei que fazer o atalho somente leitura funcionaria (tenho certeza que costumava fazer), mas depois de testar, vejo que não funciona. Isso ocorre porque o atalho não é reescrito; o destino é encontrado quando o atalho é executado. Apenas para que ninguém mais tente.
21720 Chris H

1
@ PetSerAl como eu disse acima, isso não funciona.
Chris H

Respostas:


13

Você pode usar o PowerShell! Esse pequeno script afeta o arquivo LNK para produzir o mesmo efeito que o uso do shortcututilitário clássico .

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

Para usá-lo, salve esse texto como um .ps1arquivo, por exemplo notrack.ps1. Se você ainda não o fez, siga as instruções na seção Habilitando scripts do wiki de tags do PowerShell . Em seguida, você pode executá-lo em um prompt do PowerShell:

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

Os atalhos ajustados dessa maneira não serão alterados quando o alvo for movido. Se um atalho como esse for quebrado, nada acontecerá quando você tentar abri-lo.

Reuni a matemática binária usada no meu script deste PDF da Microsoft de 48 páginas no formato LNK .


25

Pare e desative o serviço: Cliente de rastreamento de link distribuído (TrkWks).

O Rastreamento de link distribuído rastreia links em cenários em que o link é feito para um arquivo em um volume NTFS, como atalhos de shell. Se esse arquivo for renomeado, movido para outro volume no mesmo computador, movido para outro computador ou em outros cenários semelhantes, o Windows usará o Rastreamento de Link Distribuído para encontrar o arquivo.

Origem: Rastreamento de Link Distribuído - Suporte da Microsoft


Boa ideia, mas notavelmente não funcionou. O atalho ainda encontrou o arquivo mesmo quando o caminho tinha um diretório mais longo.
Kyle Delaney

Tem certeza de que o serviço está parado? Depois de parar o serviço DLTC, mudei ou renomeei o executável. Quando executei o atalho, recebi o erro "Problema com atalho" informando que o destino estava ausente e solicitando a exclusão do atalho.
19717 Steven

10
A funcionalidade "encontrar o destino certo" remonta à série Windows 9x e antecede as versões NT do Windows. O DLT não existia no Windows 9x. Isso não quer dizer que o DLT seja irrelevante; O Windows irá utilizar DLT se isso ajuda para encontrar um destino do atalho.
MSalters

2
@ Steven Sim, tenho certeza que o serviço está desativado. No Windows 10, entrei em Serviços, encontrei o Distributed Link Tracking Client, cliquei no botão Parar, reiniciei o computador e verifiquei o serviço novamente. Há um botão Iniciar e o serviço não diz em execução. Os atalhos ainda se atualizam.
Kyle Delaney

8

Use o shortcut.execomando Opção -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
Infelizmente, o shortcut.exe não está mais disponível.
Daniel B

@DanielB Você está certo, eu esqueci que recuperei o shortcut.exe em algumas versões do Windows.
Sunzi 19/07

2
@ Daniel, você sabe quais versões do Windows possuem? Pode ser útil para algumas pessoas.
18717 gronostaj #


4

Você pode habilitar o seguinte GPO:

Configuração do Usuário \ Modelos Administrativos \ Menu Iniciar e Barra de Tarefas \ Não use o método baseado em pesquisa ao resolver atalhos de shell

chave de registro correspondente: HKCU\Software\Microsoft\Windows\CurrentVersion\Policies\Explorer\NoResolveSearch

Configuração do Usuário \ Modelos Administrativos \ Menu Iniciar e Barra de Tarefas \ Não use o método baseado em rastreamento ao resolver atalhos de shell

chave de registro correspondente:

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

Configuração do Usuário \ Modelos Administrativos \ Componentes do Windows \ Explorador de Arquivos \ Não rastrear atalhos de shell durante o roaming

chave de registro correspondente: HKCU\Software\Microsoft\Windows\CurrentVersion\Policies\Explorer\LinkResolveIgnoreLinkInfo


Como habilito um GPO? Onde encontro a configuração do usuário?
Kyle Delaney

no Windows 10, você pode clicar com o botão direito do mouse no botão Iniciar -> Executar e escrever: gpedit.msc -> clicar em OK, e poderá encontrar a configuração do usuário, etc. Digite: DWORD, com um valor de 1)
Swisstone

Eu recebi um erro. O Windows não conseguiu encontrar o gpedit.msc.
Kyle Delaney

OK, então você deve criar as chaves manualmente no registro. Se você não sabe como fazer isso, criei um arquivo .reg que você pode importar: pastebin.com/KdPYFwff basta copiar e colar o conteúdo em um novo arquivo que deve terminar com a extensão ".reg" (não. txt) e clique duas vezes sobre ele
Swisstone

Obrigado. Fiz isso, reiniciei o computador e verifiquei se as chaves do registro estavam no lugar usando o regedit. Os atalhos ainda se atualizam.
Kyle Delaney
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.