NSIS安裝程式不響應的解決
阿新 • • 發佈:2019-01-08
過節前,發現一個問題,NSIS寫的安裝程式在Window Server 2012環境下,在最後的配置階段不能響應,佔用CPU30~40%的樣子。
當時有點一籌莫展,沒有找到其他地方提到過遇到這類問題,而同樣的程式在Windows 8下可以正常完成安裝。
沒有辦法,只能一點一點地先查出大概問題出來哪個階段、哪個函式,然後依次往下減可能出問題的地方。之前最嚴重懷疑的出問題的地方竟然不是,最終查出來是拷貝檔案導致出現這個現象。這個結果完全沒有預料到。
本來是怕呼叫ExeWait執行可執行程式出問題,但其實不是。不過在查用函式代替ExeWait時,查到了拷貝檔案的不同方法:
出問題的方式是
CopyFiles "$INSTDIR\xxx" "$INSTDIR\xxx.cfg"
意思是把安裝目錄下的xxx檔案拷貝為xxx.cfg。
改為另一種方式
nsExec::ExecToLog 'cmd.exe /c copy "$INSTDIR\xxx" "$INSTDIR\xxx.cfg"'
就不會出現安裝程式死在那裡的現象了。
雖然原因找到了,而且在一點一點把配置階段所有的拷貝檔案語句改成新的後,問題確實解決了。但是深層的真正原因我還是沒有找到,並百思不得其解。
實際上,CopyFile在安裝程式中依然使用著,只不過是在拷貝檔案的階段使用的。
差別可能包括,拷貝檔案階段拷貝檔案是在該段中直接呼叫拷貝函式;而配置階段對檔案的拷貝操作是在幾層函式呼叫後執行的,難道和這個有關係?可以再試驗一下。