我正在运行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
答案 0 :(得分:0)
听起来像Windows图标缓存问题,而不是NSIS问题。您可以使用以下命令清空缓存:
ie4uinit.exe -ClearIconCache
答案 1 :(得分:0)
就像idleberg在他的回答中所说,这很可能是Windows shell图标缓存问题。
要验证是否存在此问题,您可以下载Resource Hacker或使用图标编辑器检查.exe中的图标。