NSIS CreateShortcut坚持使用%ProgramFiles%作为图标路径

时间:2012-04-25 21:22:43

标签: icons nsis filepath

我有以下NSIS代码

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

安装日志显示以下内容(来自detailprint命令) 图标路径:C:\ Program Files(x86)\ Bar \ icon.ico

创建快捷方式,但使用可执行文件中的图标。

如果我打开lnk文件或右键单击快捷方式并单击“更改图标...”,我收到错误“Windows无法找到文件%ProgramFiles%\ Bar \ icon.ico。”

如果我浏览到%ProgramFiles%,它会转到c:\ Program Files,而不是详细打印命令中显示的x86版本。图标文件存在,但在x86文件夹中。

似乎NSIS或Windows正在用“%ProgramFiles%”替换“C:\ Program Files(x86)\”,这不会指向x86版本。

可执行文件的实际路径是正确的,它只是图标链接不正确。

有什么想法吗?

4 个答案:

答案 0 :(得分:9)

该主题的解决方法是在您的图标代码中添加第二个\。我真的不明白为什么这对64位系统有帮助,但它确实......

所以替换:

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

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

在APPLICATION_ICON之前添加第二个\后,将再次显示图标

令人困惑,但它有效

答案 1 :(得分:2)

NSIS只使用记录的IShellLink接口。在NSIS论坛上有一个thread(你可以尝试一种解决方法)。我相信这是WOW64中的一个错误...(注册表重定向器是docmented将%ProgramFiles%更改为%ProgramFiles(x86)%,我怀疑IShellLink缺少此hack)

答案 2 :(得分:0)

  1. 禁用重定向
  2. 从路径
  3. 加载图标

    所有操作均使用System插件完成。为什么复杂化......

答案 3 :(得分:0)

http://nsis.sourceforge.net/Docs/Chapter4.html#4.9.3.4似乎是错的,对我来说有用的是:

CreateShortCut "$SMPROGRAMS\${PRODUCT_PUBLISHER}\${SHORTCUT_NAME}.lnk" "$INSTDIR\${PRODUCT_EXE}" "$INSTDIR\${PRODUCT_EXE}" "$INSTDIR\MyIcon.ico"