无法更改特定OutPut .exe-name(NSIS)的.exe-icon

时间:2016-03-15 22:29:12

标签: java icons exe nsis file-association

我正在运行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

2 个答案:

答案 0 :(得分:0)

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

ie4uinit.exe -ClearIconCache

答案 1 :(得分:0)

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

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