【问题标题】:Can't change .exe-icon for specific OutPut .exe-name (NSIS)无法更改特定 OutPut .exe 名称 (NSIS) 的 .exe 图标
【发布时间】:2016-03-15 22:29:12
【问题描述】:

我正在运行 Windows 8.1 并使用 NSIS 为我的 java 程序创建启动器。为了尝试编写脚本,我制作了一个丑陋的 A.ico 并将其用于我的 Program.exe。现在我制作了一个漂亮的 B.ico,并使用相同的脚本尝试将其设置为我的 Program.exe 的图标。

问题是即使我相应地更改了脚本,A.ico 仍然用于 Program.exe,我似乎无法更改它。这太奇怪了,因为如果我将输出 .exe 的名称更改为例如OtherProgram.exe 选择了正确的 B.ico。如果我再将.exe重命名为Program.exe,图标会在我眼前切换回A.ico!!

我错过了什么吗?我的系统是否保存了每个名为 Program.exe 的文件都必须有图标 A.icon,只是因为我在第一个脚本中使用了它?

Name "Program"
Caption "LMX Launcher"
Icon "hidden\B.ico"
OutFile "Program.exe"

RequestExecutionLevel user

!include "FileAssociation.nsh"

SilentInstall silent
AutoCloseWindow true
ShowInstDetails nevershow

Section ""
  Call GetJRE
  Pop $R0
  StrCpy $0 '$R0 -jar hidden\getdown.jar hidden\'
  SetOutPath $EXEDIR
  ExecWait $0
  ${unregisterExtension} ".lm" "LM-fil"
  ${registerExtension} "Program.exe" ".lm" "LM-fil"
SectionEnd

Function GetJRE
  Push $R0
  Push $R1

  ClearErrors
  StrCpy $R0 "$EXEDIR\jre\bin\javaw.exe"
  IfFileExists $R0 JreFound
  StrCpy $R0 ""

  ClearErrors
  ReadEnvStr $R0 "JAVA_HOME"
  StrCpy $R0 "$R0\bin\javaw.exe"
  IfErrors 0 JreFound

  ClearErrors
  ReadRegStr $R1 HKLM "SOFTWARE\JavaSoft\Java Runtime Environment" "CurrentVersion"
  ReadRegStr $R0 HKLM "SOFTWARE\JavaSoft\Java Runtime Environment\$R1" "JavaHome"
  StrCpy $R0 "$R0\bin\javaw.exe"

  IfErrors 0 JreFound
  StrCpy $R0 "javaw.exe"

 JreFound:
  Pop $R1
  Exch $R0
FunctionEnd

【问题讨论】:

    标签: java icons exe nsis file-association


    【解决方案1】:

    听起来像是 Windows 图标缓存问题,而不是 NSIS 问题。您可以使用以下命令清空缓存:

    ie4uinit.exe -ClearIconCache

    【讨论】:

      【解决方案2】:

      就像idleberg 在他的回答中所说,这很可能是 Windows shell 图标缓存问题。

      要验证这是不是问题,您可以下载Resource Hacker 或使用图标编辑器检查 .exe 中的图标。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2019-12-23
        • 2014-03-09
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-03-27
        相关资源
        最近更新 更多