2016-03-15 73 views
0

我正在運行Windows 8.1並使用NSIS爲我的java程序創建啓動程序。要嘗試腳本編寫,我只是做了一個醜陋的A.ico,並將其用於我的Program.exe。現在我做了一個漂亮的B.ico並使用相同的腳本,我試圖將其設置爲Program.exe的圖標。無法更改具體OutPut .exe名稱(NSIS)的.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

聽起來像一個Windows圖標緩存的問題,而不是一個NSIS的問題。您可以使用以下命令清空緩存:

ie4uinit.exe -ClearIconCache

0

就像idleberg說,在他的答案,這是最有可能是Windows外殼程序圖標緩存的問題。

要驗證是否有這個問題,您可以下載Resource Hacker或使用圖標編輯器檢查.exe中的圖標。