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

24

Ao desenvolver meu produto, meu dispositivo de teste tem 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 alternar ou renomear as pastas para que a versão que desejo testar tenha o caminho certo, digamos C:\Program Files\My Company\My App\My App.exe . Eu 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á automaticamente atualizado, pensando que o arquivo foi movido permanentemente. Isso causou falhas silenciosas até que descobri 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 pensando 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.

    
por Kyle Delaney 18.07.2017 / 22:45

4 respostas

13

Você pode usar o PowerShell! Este pequeno script faz com que o arquivo LNK produza o mesmo efeito que o uso do utilitário clássico shortcut .

$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 arquivo .ps1 , por exemplo %código%. Se ainda não o fez, siga as instruções na seção Habilitando Scripts do wiki de tags do PowerShell . Então você pode executá-lo a partir de um prompt do PowerShell:

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

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

Reuni a matemática binária usada no meu script de esta 48 -página Microsoft PDF no formato LNK .

    
por 19.07.2017 / 18:45
24

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

Distributed Link Tracking tracks links in scenarios where the link is made to a file on an NTFS volume, such as shell shortcuts. If that file is renamed, moved to another volume on the same computer, moved to another computer, or moved in other similar scenarios, Windows uses Distributed Link Tracking to find the file.

Source: Distributed Link Tracking - Microsoft Support

    
por 18.07.2017 / 22:55
8

Use o comando shortcut.exe 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
    
por 19.07.2017 / 09:28
4

Você pode ativar 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 do 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 do shell

chave de registro correspondente:

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

Configuração do usuário \ Modelos administrativos \ Componentes do Windows \ Gerenciador de arquivos \ Não rastrear atalhos do shell durante roaming

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

    
por 19.07.2017 / 14:03