1. 程式人生 > >NSIS安裝製作基礎教程[初級篇], 獻給對NSIS有興趣的初學者

NSIS安裝製作基礎教程[初級篇], 獻給對NSIS有興趣的初學者

NSIS簡介:
  NSIS 是“Nullsoft 指令碼安裝系統”(Nullsoft Scriptable Installation System)的縮寫,它是一個免費的 Win32 安裝、解除安裝系統,它的特點:指令碼簡潔高效;系統開銷小;當然進行安裝、解除安裝、設定系統設定、解壓檔案等等更不在話下,幾乎可以做所有的事情。更多的功能請閱讀藍色網際的《NSIS幫助文件》。
  對於製作NSIS的使用教程,藍色網際是NSIS方面的專家,她的《NSIS幫助文件》就是一本NSIS的聖經,而對初學者來說,最頭疼的莫過於一大堆看不懂的程式碼,對他們來說無異於一本天書。緣於此,特草此基礎教程,希望NSIS專家們勿見笑,不當之處歡迎批評指正以期完善,也希望給初學者作個鋪墊。

工具:


  NIS Edit+Nullsoft Installation System(NSIS)
  [此兩款軟體都可以到世紀主站上下載到]

思路:指令碼嚮導+修改程式碼=個性化安裝包

步驟

I.利用嚮導製作安裝包:

1.安裝上述兩款,啟動NIS Edit,在“檔案”選單中“新建指令碼:嚮導”=>下一步”,如圖1:

附圖
附圖

2.設定應用程式資訊,如軟體名稱、版本、出版人等,如圖2。
當然最一個網站可以留空,如果設定了,則安裝包會生成一個對應網址的“Internet 快捷方式”。

附圖
附圖

3.設定程式選項,如安裝包圖示、安裝程式檔案、安裝包語言[這裡選“SimChinese”]、使用者圖形介面及壓縮方式等,
我們可以選用預設值,也可以點選對應專案的按鈕或下拉選單更改設定,如下圖3

附圖


附圖

4.設定安裝目錄及授權資訊,如圖4後“下一步”:

附圖
附圖

5.選定程式檔案,即我們要打包的檔案,可以使用預設的“Mainsection”,
也可以根據需要進行更改或新建組別,
如果組比較多時,
你也可以設定是否“允許使用者選擇要安裝的元件”,如圖5。

附圖
附圖

完畢後進行“新增檔案”操作,選定我們要打包的檔案,如圖6,
完成自動後返回的圖5的介面,執行下一步操作。

附圖
附圖

6.設定開始選單中資料夾名稱及快捷方式,這裡我們使用預設值,如圖7,按“下一步”:

附圖
附圖

7.指定安裝後要執行的程式,同上用預設值並設定相關執行引數及描述,
如果你和我一樣懶的話,或不想在安裝執行任何程式,則留空即可,如圖8:

附圖


附圖

8.這步是有關解除安裝程式的相關資訊,如解除安裝時的提示、解除安裝的圖示等,如圖9

附圖
附圖

9.至此完成嚮導,如圖10,,鉤選“儲存指令碼”、“轉換檔案路徑到相關路徑”及“編譯指令碼”

附圖
附圖

提示儲存指令碼路徑並自動編譯指令碼,我們可以按或F9執行安裝程式進行預覽,嚮導產生的安裝包效果圖如圖11所示:


附圖
附圖

II.修改程式碼以個性化安裝包:

10.選擇可修改之處:

1)軟體LOGO[如圖11A]、安裝包標題[圖11B]、圖11C、圖12、圖13

圖11見上樓

圖12如下

附圖
附圖

圖13如下

附圖
附圖

2)閃屏介面

11.修改程式碼

1) 修改軟體LOGO:在原始碼“ MUI Settings”後面新增下列程式碼:
以下是程式碼片段:
!define MUI_WELCOMEFINISHPAGE_BITMAP "G:\temp\ pwr.bmp"

  註釋:引號內為點陣圖的路徑,點陣圖大小大約為165*298

  效果圖如圖14所示

附圖
附圖 2)修改安裝包標題,在同上位置新增下列程式碼:
 
以下是程式碼片段:
!define MUI_WELCOMEPAGE_TITLE "\r\n PDF2all 5.35d 漢化版"
  
  註釋:\r\n為換行標誌
  
  效果圖上樓如圖14所示

3)修改圖11C中的說明,同上位置新增下列程式碼:
以下是程式碼片段:
!define MUI_WELCOMEPAGE_TEXT "  pdf2all是一個轉換器的集合,它能轉換包括doc2pdf (Word to PDF),xls2pdf (Excel Sheet到PDF),ppt2pdf(PowerPoint到PDF),mdb2pdf (Access到PDF),ps2pdf(PostScript到PDF),pdf2jpg(PDF到JPEG),pdf2bmp(PDF到BMP),pdf2tiff(PDF到TIFF),pdf2eps(PDF到EPS),pdfMerge(合併PDF檔案),pdf2ppt(PDF到PowerPoint)。\r\n\r\n  軟體漢化:高芳鑾 (Raindy)\r\n\r\n  $_CLICK"

  
  效果圖如圖14所示
  4)對圖12中的修改,在原始碼:
以下是程式碼片段:
ShowInstDetails show
ShowUnInstDetails show


後新增:
以下是程式碼片段:
BrandingText " 軟體漢化:高芳鑾 (Raindy)"


效果圖如圖15所示

附圖
附圖 5)在完成新增“漢化說明”,只要在原始碼:
以下是程式碼片段:
; Finish page

後新增:
以下是程式碼片段:
!define MUI_FINISHPAGE_SHOWREADME "$INSTDIR\漢化說明.txt"
!define MUI_FINISHPAGE_SHOWREADME_TEXT "漢化說明"

效果所示

附圖
附圖 6)閃屏介面,可以在原始碼中加入下列程式碼即可:
A、普通效果
以下是程式碼片段:
Function .onInit
SetOutPath $TEMP
File /oname=spltmp.bmp "G:\Temp\Nsisres\splash.bmp"

splash::show 2300 $TEMP\spltmp

Pop $0

FunctionEnd
以下是程式碼片段:
Function .OnInit
InitPluginsDir
File /oname=$PLUGINSDIR\splash.bmp "G:\Temp\Nsisres\splash.bmp"
advsplash::show 1500 800 600 -1 $PLUGINSDIR\splash
Functionend



7)背景音樂[貫穿安裝過程]

以下是程式碼片段:
Var hmci
Function .OnInit
InitPluginsDir
SetOutPath $PLUGINSDIR
File "G:\Temp\Nsisres\music.mp3"             [說明:源MP3的存放路徑]
System::Call msvfw32.dll::MCIWndCreate(i 0, i 0,i 0x0070, t "$PLUGINSDIR\music.mp3") i .r0
SendMessage $0 0x0465 0 "STR:play repeat"
System::Call user32.dll::ShowWindow(i r0, i 0)
StrCpy $hmci $0
Functionend

Section
;add your codes
SendMessage $hmci 0x0010 0 0
Sectionend

後語:

以上僅是NSIS製作安裝包最基本的操作,供初學者入門之用,故云“初級篇”。
希望不會怡笑大方,更希望藍MM、陳敏毅老大等NSIS高手的中高階教程:)

相關資料下載[以Pdf2allV5.35d為例,可直接點選下載]

  全文的Word文件附在附件中
NSIS.rar 偶以Pdf2allV5.35d為例,
製作了安裝包製作動畫演示

[可直接點選下載]

相關檔案列表如下:
動畫演示 [pdf2all-movie.exe]

安裝包的NSIS指令碼程式碼 [PDF2all-nsis.nsi.txt]

成品的安裝包 [pdf2all-setup.exe]

常見修改的程式碼 [code.txt]

NSIS基礎教程CHM版 [NSIS安裝製作基礎教程(CHM格式)-特別感謝tracky]

感謝chenmy老大提供空間:)

偶的閃屏圖:


附圖
附圖 下面摘引一些論壇的討論,原帖點選進入 漸現漸隱的程式碼:
以下是程式碼片段:
Function .OnInit
InitPluginsDir
File /oname=$PLUGINSDIR\splash.bmp c:\test.bmp
advsplash::show 1500 800 600 -1 $PLUGINSDIR\splash
Functionend



背景音樂(貫穿安裝全過程):
以下是程式碼片段:
Function .OnInit
InitPluginsDir
SetOutPath $PLUGINSDIR
File "c:\a.mp3"
System::Call msvfw32.dll::MCIWndCreate(i 0, i 0,i 0x0070, t "$PLUGINSDIR\a.mp3") i .r0
SendMessage $0 0x0465 0 "STR:play repeat"
System::Call user32.dll::ShowWindow(i r0, i 0)
StrCpy $hmci $0
Functionend

Section
;add your codes
SendMessage $hmci 0x0010 0 0
Sectionend



背景音樂2:
以下是程式碼片段:
Section/Function
SetOutPath $PLUGINSDIR
File $WINDIR\MEDIA\chimes.wav
BgImage::Sound /NOUNLOAD /WAIT "$PLUGINSDIR\chimes.wav"
BgImage::Clear /NOUNLOAD
Sectionend/Functionend


最後一種方法使用了 bgimage 外掛,安裝程式執行到該外掛時會等待 wav 播放完再繼續執行。
謝謝dujuan509兄
如果閃屏效果[漸隱]+背景音樂[全程]放在一起
那程式碼該如何修改?
偶兩者無法兼得 
望不吝賜教 
以下是程式碼片段:
outfile test.exe
Var hmci

Function .OnInit
InitPluginsDir
SetOutPath $PLUGINSDIR
File "c:\a.mp3"
System::Call msvfw32.dll::MCIWndCreate(i 0, i 0,i 0x0070, t "$PLUGINSDIR\a.mp3") i .r0
SendMessage $0 0x0465 0 "STR:play repeat"
System::Call user32.dll::ShowWindow(i r0, i 0)
StrCpy $hmci $0

File /oname=$PLUGINSDIR\splash.bmp c:\test.bmp
advsplash::show 1500 800 600 -1 $PLUGINSDIR\splash

Functionend

Section
;add your codes
sleep 5000
SendMessage $hmci 0x0010 0 0
Sectionend


謝謝dujuan509兄
已經學會了:)
可惜背景音樂只能支援MP3格式
如果能支援midi等就好了 

藍色網際
MIDI 請參考這個 DEMO

附件  
  midi.zip

 藍色網際
推薦一個 NSIS 的快速編輯器 - NotePad2。雖然不是 NSIS 專門編輯器不過有時候比 Venis 方便,因為 Venis 不支援文字塊操作,而且 Venis 對語法高亮做得不是很好。NotePad2 的語法高亮是根據字尾名來確定的,只要你開啟 NSI 檔案不用任何設定就會自動語法高亮。
其實 NotePad2 作為記事本替代者也非常不過,介面非常相似,而 NotePad2 功能強大了好多。
你可以在 http://foobar.nease.net/nsis/np2.exe 下載我修改的版本,主要補全了 NSIS 語法高亮,原版由於很久沒更新 NSIS 的語法高亮程式碼,所以有一些新增的 NSIS 指令不能高亮顯示。
並作了一些優化,做要是讓它更像記事本

貼個圖:

附圖
附圖 dujuan509
引用 (zkdpower @ 2005年01月25日 23時08分)
我想問一下各位,如何把安裝頁面中的“Setup將安裝……”中的Setup改成別的字

你指的是選擇安裝目錄頁面的提示文字吧?

只需在
以下是程式碼片段:
!insertmacro MUI_PAGE_DIRECTORY 

前面新增一行:
 
以下是程式碼片段:
!define MUI_DIRECTORYPAGE_TEXT_TOP "你需要的文字"

藍色網際
 

引用 (zjj1988101 @ 2005年01月26日 09時49分)
引用 (藍色網際 @ 2005年01月26日 09時03分)
用 NSIS 2.03 的吧,那個版本簡體語言符合我們的習慣。

請教藍前輩~
NSIS的閃屏圖片的格式支援幾種格式?
只支援點陣圖嗎?可以支援其他圖片格式嗎?

藍色網際
 

raindy 有時間的話看看我這個漢化補丁的 NSIS 指令碼,然後寫一篇教程,嘿嘿,寫東西你比較拿手 

基本上包括了做補丁包含的大部分情況:
自動查詢原版軟體安裝目錄幷包含目錄修正
原版軟體的備份和恢復,以及漢化補丁的解除安裝
對原版進行 MD5 校驗
把漢化補丁應用到原版軟體不同版本
登錄檔的修正,主要是右鍵選單
資料庫的漢化
讀取、修改、寫入登錄檔二進位制型別資料


NSIS 做補丁的優點是生成檔案比較小,而且還可以包含 N 個版本的補丁

附件  
  hb-acdsee7_pub[1].nsi.zip
raindy
引用 (水木魚 @ 2005年01月27日 17時10分)
請問題頭的圖示是怎麼加的

設定了自定義安裝圖示就會自動顯示的,不需要另外新增,自定義安裝圖示:

以下是程式碼片段:
!define MUI_ICON "G:\Temp\Nsisres\PDFsetup.ico"


這一點和INNO不同,INNO中則需要在[setup]中設定:
以下是程式碼片段:
WizardSmallImageFile=G:\軟體測試\嘗試漢化\安裝包\PDF2all\sm.bmp
其他需要個性化的地方,建議閱讀一下藍色網際翻譯的NSIS幫助文件
  zkdpower
   請問各位如何改這些
第一個就是如何把插入的headerimage圖片放到右邊(預設是在左邊)
第二個就是把headerimage上面的字改掉
謝謝

附圖
附圖
以下是程式碼片段:
!define MUI_HEADERIMAGE

2、在 !insertmacro MUI_PAGE_LICENSE "c:\License.txt"前增加兩行:
以下是程式碼片段:
!define MUI_PAGE_HEADER_TEXT 111
!define MUI_PAGE_HEADER_SUBTEXT 222
  zkdpower
請問藍色網際,在你的MUI 文件中有
“MUI_HEADERIMAGE_RIGHT
令本應顯示於左邊的頁首影象顯示於右面(當使用 RTL 語言時, 它將會顯示於左邊而不顯示於右邊).”
這麼一段話,請問何為RTL語言呢,本人愚拙,望指點 

藍色網際
RTL 就是 Right to Left,從右到左書寫的語言,大概像阿拉伯這樣的語言吧。


restools
venis function 嚮導功能在 NISEdit 上完整實現,晚上或明天放出,不過需要人幫忙把嚮導指令碼編寫完整,因為寫程式時只是拿了4個具代表性的 function 來作為測試,這是這次放出版本實現的功能。要知道 NSIS 的 funciton 有這麼多啊。
以下是程式碼片段:

; NSIS 函式嚮導檔案
; 指令碼解釋
; Textbox(文字框) 如果不寫入這項 Texbox 預設使用 引數1(不帶引號)
; 0:(不顯示) 1:(不帶引號) 2:(帶雙引號) 3:(多行顯示)
;
; Checkbox(允許引數按鈕) 如果不寫入這項 Texbox 預設使用 引數0(必填引數)
; 0:(必填引數) 1:(可選擇) 2:(將來使用)
;
; Button(選擇引數填充按鈕) 如果不寫入這項 Button 預設使用 引數0(選擇引數)
; 0:(不顯示) 1:(瀏覽選擇檔案) 2:(瀏覽選擇目錄) 3:(選擇引數) 4:(選擇排序後的引數) 5:(選擇可複合引數)
; 6:(選擇已排序的可複合引數) 7:(可選擇目錄或檔案)
;
; 標記: %%LABELS%%    -- 用在 Goto 這類函式中的 標記 引數
;
; 函式: %%FUNCTIONS%% -- 用在 Call 這類函式中的呼叫 引數
;
; 以上兩個常用變數是會自動檢測 NSIS 腳本里面的已有標記和函式的
;
;例子:
;[Abort]      -- 函式名字
;Help=取消安裝,停止執行指令碼,並且在狀態顯示裡顯示使用者資訊。 -- 在函式嚮導對話方塊中旁邊的簡明幫助
;NumArgs=1      -- 函式共有幾個引數
;Arg1=使用者資訊      -- 顯示在引數頂上的提示語句
;Button1=0      -- 該按鈕不顯示
;Checkbox1=0      -- 該引數為必填項
;Textbox1=2      -- 該引數為帶雙引號的字串
;
;
;如果是多行字元例如簡明幫助,如果你要強行換行,請用英文的逗號,如果你必須要顯示英文的逗號,請用雙引號括起整個字串。
;Help=""Cancels the install, stops execution of script, and displays user_message in the status display.""
;

[Abort]
Help=取消安裝,停止執行指令碼,並且在狀態顯示裡顯示使用者資訊。
NumArgs=1
Arg1=使用者資訊
Checkbox1=0
Button1=0
Textbox1=2

[BringToFront]
Help=使安裝程式視窗可見並把它帶到其他視窗的最前端。
NumArgs=0

[CreateShortCut]
Help=建立一個指向“目標檔案”的快捷方式“快捷檔案.lnk”,可以帶“引數”引數。
NumArgs=8
Arg1=快捷檔案.lnk
Checkbox1=0
Button1=0
Textbox1=2
Arg2=目標檔案
Checkbox2=0
Button2=1
Textbox2=2
Arg3=引數
Checkbox3=1
Button3=0
Textbox3=2
Arg4=圖示檔案
Checkbox4=1
Button4=1
Textbox4=2
Arg5=圖示索引號
Button5=0
Checkbox5=1
Textbox5=1
Arg6=啟動選項
Button6=3
Checkbox6=1
Textbox6=1
Options6=SW_SHOWNORMAL,SW_SHOWMAXIMIZED,SW_SHOWMINIMIZED
Arg7=鍵盤快捷鍵
Button7=0
Checkbox7=1
Textbox7=2
Arg8=描述
Button8=0
Checkbox8=1
Textbox8=2

[Goto]
Help=如果指定了標記,則跳轉到“要跳轉的標記:”。
NumArgs=1
Arg1=要跳轉的標記 | +偏移| -偏移| 使用者變數(目標)
Textbox1=1
Checkbox1=0
Button1=3
Options1=%%LABELS%%

[Call]
Help=呼叫“函式名”函式。如果在 Uninstall 區段,Call 僅能呼叫以“un.”開頭的函式名。
NumArgs=1
Arg1=函式名 | :標記名
Button1=3
Checkbox1=0
Textbox1=1
Options1=%%LABELS%%,%%FUNCTIONS%%

顯示效果

2.彈出函式編輯視窗:

3.確定後,輸入,這裡一提的是,輸入時,會自動根據上一行程式碼的縮排,自動在輸入的函式行前面新增前導空格,以減少自己再輸入前面的空格。

==================
ISS2NSI v1.0a2
==================
ISS2NSI is a tool for convert Inno Setup script files into NSIS script files.


Usage:
==================
Program:
At the command prompt write: iss2nsi issscript.iss [nsiscript.nsi]
if nsiscript.nsi is no specified then the converted script will be
saved with the same name of the issscript.iss but with extension .nsi.

NIS Edit Plugin:
1- Close HM NIS Edit.
2- Put hmne_iss2nsi.dll in the plugins directory
(Default $PROGRAMFILES\HMSoft\NIS Edit\Plugins)
3- Start HM NIS Edit.
4- You will found a new item in the tools menu called "Convert InnoSetup script".

NOTE: Before compile the converted script please check it, because
complete compatibility is NOT available. I design this tool to convert my
Inno Setup scripts and is not tested with more complex scripts.

The source code is included if you want to contribute to the project
for make the converted script 100% compatible with the original.
Please send my your modifications to [email protected]
Note that this project is a modification to the Inno Setup 3.0.6
compiler and modifications to the Inno Setup source files are under
the Inno Setup license (see: src\is-src\is-license.txt).

Note: the files in the src\is-src directory are unmodified Inno Setup
source files needed by the Compile.pas unit located in the src directory

---------------------------------------------------------
hmne_iss2nsi.dll 把這個檔案放到 NISEdit 目錄下的 Plugins 中就可以使用,沒有詳細測試,不過如果是針對版本的話, Inno Setup 3.0.6 ,估計應該沒問題吧。
ISS2NSI.rar

雖然版本太低,用來從 ISS 的指令碼轉向學習 NSIS 應該容易點吧。

ISS2NSI 原始碼下載。

沒時間去看看它,只是把它編譯成了一個DLL。有時間看看它是什麼原理。

NISEdit 的增強版本,希望有人來幫幫忙,增加一下函式,否則這個版本也強不到哪裡去。

把裡面的那些檔案放入 NISEdit 的目錄中,為了區分原版,程式改名為 VNISEdit。
兩個版本可以同時存在,不過你要把 VNISEdit 設為預設編輯器,才可以預設用它來開啟。

修正:
1.新增一種選單的面板。
2.增加 NSIS 函式嚮導功能。(類似 Venis 中的 function 功能)
4.改程式呼叫幫助時,不要把幫助視窗置頂,因為置頂會令到檢視幫助時不能切換會編輯器視窗。

最新功能(區段結構分析)
左圖是VNISEdit解釋的,右圖是Venis分析的。分析物件(makensis.nsi)

全景圖:試一下唄,分析速度比 Venis 好很多的。基本上感覺不到檢視的閃動。執行緒實時分析,只要改動程式碼,檢視會立刻作出反應。


 
請問下面那些問題怎樣做的,
1、怎樣控制自定義面的“下一步”按鈕的可用與不可用
2、怎樣為自定義頁面上的元件新增Change事件呢
3、我在這個網站裡下載的foobar漢化增強版的安裝檔案裡看到頁面“MUI_PAGE_COMPONENTS”是怎麼做到的,就是怎麼把那個頁面的左邊改為能顯示描述內容和隱蔽一些文字

colonel

藍色網際
對於控制下一步按鈕來說,有三個階段分別是:頁面初始化之前、頁面初始化時、頁面要關閉時。不同的階段對應的插入函式不同。

比如要在頁面初始化之前禁止下一步按鈕,MUI 介面可以這樣

 

以下是程式碼片段:
!define MUI_PAGE_CUSTOMFUNCTION_PRE ComponentPre
!insertmacro MUI_PAGE_COMPONENTS

Function ComponentPre
GetDlgItem $0 $HWNDPARENT 1 
EnableWindow $0 0
FunctionEnd 
colonel
那“2、怎樣為自定義頁面上的元件新增Change事件呢”,我自定義了一個配置頁面,我想使用者在完成配置才可啟用“下一步”按鈕,這個怎麼做的呢

藍色網際
需要給控制元件加上 NOTIFY 的標記。
例子在我的簽名裡有。

需要先了解 GetDlgItem 和 EnableWindow 指令的作用。

colonel
這個問題呢
3、我在這個網站裡下載的foobar漢化增強版的安裝檔案裡看到頁面“MUI_PAGE_COMPONENTS”是怎麼做到的,就是怎麼把那個頁面的左邊改為能顯示描述內容和隱蔽一些文字
怎樣使“MUI_PAGE_COMPONENTS”中的樹目錄只能在點選複選框才被選中呢

藍色網際
這個用 Resource Hacker 調整一下控制元件就行了。預設的 UI 檔案是 NSIS\Contrib\UIs\modern.exe
到我的簽名裡下一個特別版的 makensis.exe。

colonel
我不想在元件選擇頁面中用 onMouseOverSection 來顯示 描述 ,如果架設函式可以增加的話,我就想到這個 “回撥 onMouseDownSection ”

我是想通過元件目錄裡的 OnChange 事件來顯示

我不懂VC++吖,如果我會的話就可以像MM你那樣去改它的程式碼了

藍色網際
特別版的就是這樣啊,當你點選元件的時候描述區域才會顯示或改變。
普通版的只要滑鼠移上去就顯示了。你沒試過嗎。

colonel
哦~~~~~~~試到了,原來你是改了onMouseOverSection 回撥,對啦,MM你有沒有做過 元件的OnChange 事件嗎?主要是用在自定義頁面上的

是用這個嗎?Call shell32.dll::SHChangeNotify

藍色網際
不知道你說的“元件的 OnChange 事件”是什麼意思。
是不是當元件選擇更改的時候呼叫的函式呢?如果是的話那直接使用 Function .onSelChange 就行了。

wq99
各位好:我是新手,
我在看function時,沒發現引數的傳入。
可能我的思維方式不對。
function Fname
functionend
引數應該怎麼傳呢?

藍色網際
NSIS 的函式其實是個假函式,並不能像 C++ 那樣傳遞引數,如果你需要傳遞引數請使用堆疊。
一個典型的例子請看附錄的 Get parent directory。 

那如果一個Edit裡的內容發生變化,另一個元件也跟關變化,這個Edit 的Change事件去寫呢

PS:可能我習慣於使用delphi所以有時說到的元件事件名稱與你不一樣吧 

colonel
 
那如果一個Edit裡的內容發生變化,另一個元件也跟關變化,這個Edit 的Change事件去寫呢
 
 PS:可能我習慣於使用delphi所以有時說到的元件事件名稱與你不一樣吧

藍色網際
你可以參考一下 NSIS\Contrib\InstallOptions\testnotify.nsi

wq99
File "${LOCATION}\$R0"
$R0是一個檔案,結果
說沒有這個檔案,
File "${LOCATION}\123.exe"
那就可以了。

奇怪,我第一句寫錯了麼?
File "${LOCATION}\${R0}"這樣也不對。

藍色網際
你可以先在資源管理器裡看看是否有 $R0 這個檔案。一般來說很少有這種不帶副檔名的奇怪檔案,況且不帶副檔名的話很容易被當作目錄來處理。

一般來說編譯器的報告是正確的,這裡有一個測試指令碼,你可以試試看。
test.zip

wq99
啊~對不起啊,我沒說仔細。

$R0是變數,是從堆疊裡Pop出來的。
即123.exe.
File "${LOCATION}\$R0"
即File "${LOCATION}\123.exe"

 

以下是程式碼片段:
Push "123.exe"
……
Function InstallOne
Pop $R0
DetailPrint $R0
SetOutPath "$INSTDIR"
File "${LOCATION}\$R0"
ExecWait ’"$INSTDIR\$R0"’
FunctionEnd


DetailPrint $R0
是可以打印出 123.exe
改成File "${LOCATION}\123.exe"是可以的。
怎麼用$R0就不行了呢?

藍色網際
File 指令後面的檔案必須是編譯時當前系統存在的檔案,而 $R0 要在編譯後才有值當然會出錯。變數是執行時才有效的。
如果你想改名的話請使用 File "/oname=目標檔案" "本地檔案"
oname= 後面的目標檔案可以用變數。  

arthur810
為什麼我的“安裝程式語言”裡面是空的
如圖,請指教,謝謝
注:WinXP SP2簡體中文系統

zhp0083
手動指定一次就會有了
 

以下是程式碼片段:
!insertmacro MUI_LANGUAGE "SimpChinese" 

sjhome
請問NSIS只能新增一個目錄下的檔案,怎麼樣能新增所以目錄下的檔案呢?怎麼設定呢?多謝!
如圖所示.
只能新增"Counter-Strike Source"目錄下的檔案,怎麼樣能新增"Counter-Strike Source下的bin檔案,config檔案及所以資料夾"呢?

藍色網際
File 可以使用 /r 或 /x 。