2012-04-25 8 views
5

Ho il seguente codice di NSISNSIS CreateShortcut insiste sull'uso% Programmi% per il percorso dell'icona

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 

Il log di installazione mostra il seguente (dal comando detailprint) percorso Icon: C: \ Program Files (x86) \ Bar \ icon.ico

Il collegamento è stato creato, ma con l'icona dell'eseguibile.

Se apro il file lnk o clicco destro sul collegamento e clicco su "Cambia icona ...", viene visualizzato l'errore "Impossibile trovare il file% ProgramFiles% \ Bar \ icon.ico."

Se sfoglio a% Programmi%, mi porta in c: \ Programmi, non nella versione x86 come mostrato nel comando dettagliprint. Il file dell'icona esiste, ma nella cartella x86.

Sembra che NSIS o Windows stiano sostituendo "C: \ Programmi (x86) \" con "% Programmi%", che non punta alla versione x86.

Il percorso effettivo dell'eseguibile è corretto, è solo il collegamento dell'icona che non è corretto.

Qualche idea?

risposta

9

La soluzione dal thread è aggiungere un secondo \ al codice dell'icona. Non ho davvero avuto il motivo per cui questo aiuta su sistemi a 64 bit, ma lo fa ...

consentendo di sostituire:

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

con

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

Dopo aver aggiunto il secondo \ prima APPLICATION_ICON L'icona essere di nuovo visualizzato

confusione, ma funziona

2

NSIS utilizza solo l'interfaccia documentata IShellLink. C'è uno thread su di esso nel forum NSIS (con una soluzione che puoi provare). Credo che sia un bug in WOW64 ... (Il redirector del registro è docmented per cambiare% ProgramFiles% in% ProgramFiles (x86)% dietro la schiena, sospetto che IShellLink manchi di questo hack)

0
  1. Disabilita reindirizzamento
  2. caricare l'icona dal percorso

Tutto è fatto con il plugin di sistema. Perché complicare ...