2012-04-25 11 views
5

Tengo el siguiente código NSISNSIS CreateShortcut insiste en usar% Archivos de programa% para la ruta de icono

Function CreateDesktopSC 
    ;Creates Desktop Shortcut 
    SetShellVarContext current 
    SetOutPath "$DOCUMENTS\Foo\" 
    SetShellVarContext all 
    detailprint "Icon path: $INSTDIR\Bar\icon.ico" 
    CreateShortCut "$DESKTOP\${productName}.lnk" "$INSTDIR\Bar\binary.exe" "" "$INSTDIR\Bar\icon.ico" 0 
FunctionEnd 

El registro de instalación muestra el siguiente (con el comando detailprint) Ruta icono: C: \ Archivos de programa (x86) \ Barra \ icono.ico

Se crea el acceso directo, pero con el icono del ejecutable.

Si abro el archivo lnk o hago clic derecho en el acceso directo y hago clic en "Cambiar icono ...", aparece el error "Windows no puede encontrar el archivo% ProgramFiles% \ Bar \ icon.ico".

Si busco% ProgramFiles%, me lleva a c: \ Archivos de programa, no a la versión x86 como se muestra en el comando detailsprint. El archivo de icono existe, pero en la carpeta x86.

Parece que NSIS o Windows está reemplazando "C: \ Archivos de programa (x86) \" con "% ProgramFiles%", que no apunta a la versión x86.

La ruta real al ejecutable es correcta, es solo el enlace del icono que es incorrecto.

¿Alguna idea?

Respuesta

9

La solución de la rosca es agregar un segundo \ a su código de icono. Yo realmente no tengo por qué esto ayuda en sistemas de 64 bits, pero sí ...

por lo reemplace:

CreateShortCut "$SMPROGRAMS\$StartMenuGroup\${PRODUCT_NAME}.lnk" "yourapp.exe" "$INSTDIR\${APPLICATION_ICON}" 

con

CreateShortCut "$SMPROGRAMS\$StartMenuGroup\${PRODUCT_NAME}.lnk" "yourapp.exe" "$INSTDIR\\${APPLICATION_ICON}" 

Después de añadir el segundo \ antes APPLICATION_ICON el icono se muestra de nuevo

confuso pero funciona

2

NSIS simplemente utiliza la interfaz documentada IShellLink. Hay un thread al respecto en el foro de NSIS (con una solución que puede probar). Creo que es un error en WOW64 ... (El redirector registro es docmented% para cambiar de programa% a% ProgramFiles (x86)% detrás de la espalda, sospecho IShellLink falta este hack)

0
  1. desactivar la redirección
  2. cargar el icono de la trayectoria

Todo se hace con el plugin del sistema. ¿Por qué complicar ...

Cuestiones relacionadas