有時我們需要創建客戶端應用或者是不需要聯網的小程序,例如一個桌面小游戲,你想發給你的好友。使用Winform或者wpf,用戶需要安裝30多M的.net框架。然而我們使用Silverlight這個精簡框架作為.net運行時,打包后的應用程序就小的多。拿我打包的這個漢諾塔小游戲來說,全部打包后只有6M多,其中xap文件只有32K,其他是Silverlight 5安裝程序。這樣,用戶只需雙擊我們的打包后的安裝程序,就會自動創建程序的桌面和開始菜單的快捷方式,用戶感覺像是在使用winform應用程序。
打包的漢諾塔源程序來自Aimeast的【Silverlight】漢諾塔游戲,帶AI 一文
制作步驟:
1、下載並安裝打包程序NSIS,這是一個開源的打包程序。下載地址:http://nsis.sourceforge.net/Main_Page
不同於VS的安裝項目,NSIS是基於腳本創建打包程序的。
2、讓我們的Silverlight應用程序支持OOB。在工程屬性中如下設置:

3、創建一個Setup目錄,目錄中包含如下文件:

其中AnyHanoi.xap是Silverlight的漢諾塔小游戲,setup.nsi是nsis的安裝腳本,silverlight.exe是Silverlight5安裝程序,splash.bmp用於在安裝時顯示一張圖片。
4、制作安裝腳本
用記事本打開setup.nsi文件,輸入以下內容並保存:
Name "Silverlight漢諾塔小游戲"
OutFile "SlAnyHanoi.exe"
InstallDir "$PROGRAMFILES\SLAnyHanoi"
XPStyle on
Function .onInit
# the plugins dir is automatically deleted when the installer exits
InitPluginsDir
File /oname=$PLUGINSDIR\splash.bmp "splash.bmp"
splash::show 1000 $PLUGINSDIR\splash
Pop $0
FunctionEnd
Section
SetOutPath "$INSTDIR"
SetOverwrite ifnewer
File "Silverlight.exe"
ExecWait "$INSTDIR\Silverlight.exe /q /doNotRequireDRMPrompt"
File "AnyHanoi.xap"
ExecWait '"$PROGRAMFILES\Microsoft Silverlight\sllauncher.exe" /install:"$INSTDIR\AnyHanoi.xap" /origin:"http://localhost/AnyHanoi.xap" /shortcut:desktop+startmenu'
SectionEnd
大體意思是:以靜默方式安裝Silverlight運行時(如果已經安裝了,這個過程會很快結束),然后通過sllauncher.exe(silverlight運行時自帶)安裝我們的應用程序,並創建快捷方式。
5、編譯腳本,生成安裝程序:

右鍵點擊setup.nsi,選擇"Compile NSIS Script",會在此目錄下輸出的安裝程序:

SlAnyHanoi.exe就是我們要的,發給你的用戶吧。
6、在沒有安裝Silverlight的XP虛擬機上測試,成功!
