5

我有以下 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,而不是 detailsprint 命令中显示的 x86 版本。图标文件存在,但在 x86 文件夹中。

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

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

有任何想法吗?

4

4 回答 4

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 之前添加第二个 \ 后,图标将再次显示

令人困惑,但它有效

于 2012-08-14T16:25:45.940 回答
2

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

于 2012-04-25T22:47:38.443 回答
0
  1. 禁用重定向
  2. 从路径加载图标

一切都通过系统插件完成。为什么要复杂...

于 2012-08-14T16:30:05.070 回答
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"
于 2012-10-02T23:50:44.713 回答