1. 程式人生 > >NSIS安裝程式不響應的解決

NSIS安裝程式不響應的解決

過節前,發現一個問題,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在安裝程式中依然使用著,只不過是在拷貝檔案的階段使用的。

差別可能包括,拷貝檔案階段拷貝檔案是在該段中直接呼叫拷貝函式;而配置階段對檔案的拷貝操作是在幾層函式呼叫後執行的,難道和這個有關係?可以再試驗一下。