¿Cómo evito que un acceso directo de Windows actualice su ruta?

24

Mientras desarrollo mi producto, mi dispositivo de prueba tiene varias versiones de la aplicación instaladas al mismo tiempo. Sin embargo, para obtener las rutas absolutas que mi aplicación está utilizando para trabajar, necesito cambiar o cambiar el nombre de las carpetas para que la versión que quiero probar tenga la ruta correcta, por ejemplo C:\Program Files\My Company\My App\My App.exe. Hice un acceso directo que apunta a esta ruta, pero si este acceso directo se abre cuando ninguna de las versiones tiene esa ruta, el acceso directo se actualizará automáticamente, pensando que el archivo se ha movido permanentemente. Esto causó fallas silenciosas hasta que descubrí lo que estaba sucediendo. No sabía que esta era una característica de los accesos directos de Windows hasta ahora.

Entonces mi pregunta es simple. ¿Hay alguna forma de desactivar esta función? Globalmente es bueno, pero una solución por atajo sería mejor.

El uso de un archivo por lotes en lugar de un acceso directo es una solución, pero me pregunto si hay alguna manera de hacer que esto funcione mientras todavía se usa un acceso directo.

Estoy usando Windows 10 Home y Windows 7 Home.

Kyle Delaney
fuente
10
Lo que he hecho en el pasado es usar un archivo por lotes ( .bat) con un comando simple, por ejemplo start "" "C:\path\to\file.exe".
Bob
1
¿Has intentado crear un enlace simbólico (usando el mklinkcomando) en lugar de un .lnkarchivo? ¿O también se actualizan?
JAB
1
Los enlaces simbólicos de @JAB no deben actualizarse, pero tienen ciertas desventajas (requieren privilegios de administrador, no pueden pasar argumentos, etc.). Aunque funcionan bien si eso no es un problema.
Bob
3
Pensé que hacer el acceso directo de solo lectura funcionaría (estoy seguro de que solía hacerlo) pero después de probarlo veo que no. Esto se debe a que el acceso directo no se reescribe; el objetivo se encuentra cuando se ejecuta el acceso directo. Solo para que nadie más lo intente.
Chris H
1
@PetSerAl como dije anteriormente, eso no funciona.
Chris H

Respuestas:

13

¡Puedes usar PowerShell! Este pequeño script golpea el archivo LNK para producir el mismo efecto que usar la shortcututilidad clásica .

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

Para usarlo, guarde ese texto como un .ps1archivo, por ejemplo notrack.ps1. Si aún no lo ha hecho, siga las instrucciones en la sección Habilitación de scripts de la wiki de etiquetas de PowerShell . Luego puede ejecutarlo desde un indicador de PowerShell:

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

Los atajos que se modifican de esta manera no cambiarán cuando su objetivo se mueva. Si un acceso directo como este se rompe, no pasará nada cuando intentes abrirlo.

Reuní las matemáticas binarias utilizadas en mi secuencia de comandos de este PDF de 48 páginas de Microsoft en el formato LNK .

Ben N
fuente
25

Detenga y deshabilite el servicio: Cliente de seguimiento de enlaces distribuidos (TrkWks).

El seguimiento distribuido de enlaces rastrea enlaces en escenarios en los que el enlace se realiza a un archivo en un volumen NTFS, como los accesos directos de shell. Si se cambia el nombre de ese archivo, se mueve a otro volumen en la misma computadora, se mueve a otra computadora o se mueve en otros escenarios similares, Windows usa el Rastreo de enlaces distribuidos para encontrar el archivo.

Fuente: Seguimiento de enlaces distribuidos - Soporte de Microsoft

Steven
fuente
Buena idea, pero notablemente no funcionó. El acceso directo todavía encontró el archivo incluso cuando la ruta era un directorio más largo.
Kyle Delaney
¿Estás seguro de que el servicio está detenido? Después de detener el servicio DLTC, moví o cambié el nombre del ejecutable. Cuando ejecuté el acceso directo, recibí un error de "Problema con acceso directo" que decía que faltaba el objetivo y que solicitaba eliminar el acceso directo.
Steven
10
La funcionalidad "encontrar el objetivo correcto" se remonta a la serie Windows 9x y es anterior a las versiones NT de Windows. DLT no existía en Windows 9x. Eso no quiere decir que DLT sea irrelevante; Ventanas se utilice DLT si eso ayuda a encontrar un destino del acceso directo.
MSalters
2
@ Steven Sí, estoy seguro de que el servicio está desactivado. En Windows 10, entré en Servicios, encontré el Cliente de seguimiento de enlaces distribuidos, hice clic en el botón Detener, reinicié mi computadora y verifiqué el servicio nuevamente. Hay un botón de Inicio y el servicio no dice en ejecución. Los atajos todavía se actualizan.
Kyle Delaney
8

Use el shortcut.execomando Opción -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
Sunzi
fuente
44
Lamentablemente, shortcut.exe ya no está disponible.
Daniel B
@DanielB Tienes razón, olvidé que he rescatado shortcut.exe en algunas versiones de Windows.
Sunzi
2
@Daniel, ¿sabes qué versiones de Windows lo tienen? Podría ser útil para algunas personas.
gronostaj
1
Aparentemente es parte del Kit de recursos del servidor Windows NT4. Originalmente se puso a disposición en CD.
Daniel B
4

Puede habilitar el siguiente GPO:

Configuración de usuario \ Plantillas administrativas \ Menú Inicio y barra de tareas \ No utilice el método basado en la búsqueda al resolver accesos directos de shell

clave de registro correspondiente: HKCU\Software\Microsoft\Windows\CurrentVersion\Policies\Explorer\NoResolveSearch

Configuración de usuario \ Plantillas administrativas \ Menú de inicio y barra de tareas \ No utilice el método basado en el seguimiento al resolver accesos directos de shell

clave de registro correspondiente:

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

Configuración de usuario \ Plantillas administrativas \ Componentes de Windows \ Explorador de archivos \ No rastrear accesos directos de shell durante el roaming

clave de registro correspondiente: HKCU\Software\Microsoft\Windows\CurrentVersion\Policies\Explorer\LinkResolveIgnoreLinkInfo

Swisstone
fuente
¿Cómo habilito un GPO? ¿Dónde encuentro la configuración de usuario?
Kyle Delaney
en Windows 10, puede hacer clic con el botón derecho en el botón de inicio -> Ejecutar y escribir: gpedit.msc -> hacer clic en Aceptar, luego podrá encontrar la Configuración del usuario, etc. O puede crear las claves de registro que especifiqué ( Tipo: DWORD, con un valor de 1)
Swisstone
Tengo un error Windows no pudo encontrar gpedit.msc.
Kyle Delaney
OK, entonces debe crear las claves manualmente en el registro. Si no sabe cómo hacerlo, creé un archivo .reg que puede importar: pastebin.com/KdPYFwff simplemente copie y pegue el contenido en un nuevo archivo que debe terminar con la extensión ".reg" (no. txt) y haga doble clic en él
Swisstone
Gracias. Lo hice, reinicié mi computadora y verifiqué que las claves de registro estaban ahora en su lugar usando regedit. Los atajos todavía se actualizan.
Kyle Delaney