1. 程式人生 > >程式打包 之 NSIS指令碼

程式打包 之 NSIS指令碼

這段時間負責公司的程式的打包,於是就學習了一下NSIS的指令碼,結果是英文的,所以就有了翻譯一下,順便學習一下的想法。 編寫NSIS程式打包指令碼,只需要用一個文字編輯器,最好是帶有行號的,這樣會有助於讀懂編譯錯誤提示。下面開始學習打包。 1. NSIS指令碼的基本結構 installer attribute 安裝屬性:這個決定了安裝程式的行為、外觀。 Page 頁:對於非靜默安裝的程式來說,一般會要求使用者做一些安裝確認,那麼這個命令就有用了。這個命令可以用來讓使用者確認license,選擇安裝元件等。 Sections 段:一般來說,一個程式會有很多東西要安裝。比如一些dll庫,文字檔案,示例等。這些元件都有它們對應的程式碼,如果使用者選擇了安裝這些元件,那麼相應的程式碼就會被呼叫。在NSIS指令碼中,這個程式碼寫在Section段中。段的名字就顯示在元件名稱中。如果元件被選中,那麼段中的程式碼就會被執行。當然你也可以將程式碼解除安裝一個段中,但是如果你想讓使用者選擇元件的話,那你就必須把程式碼寫在不同的段中。 解除安裝程式碼也可以寫在不同的段中,解除安裝段都以"un."開頭,比如: Section "un.Uninstaller Section"     ;指令碼程式碼 SectionEnd Functions 函式
:函式也可以包含指令碼程式碼,但是函式跟段的不同之處在於呼叫方式。函式有兩種型別使用者定義函式和回撥函式。      使用者定義函式可以被段或者被其他函式使用call命令呼叫,這類函式除非你主動呼叫它們,否則它們不會被執行。安裝程式會在你使用Call命令呼叫函式之後,繼續執行Call命令之後的程式碼,除非在函式呼叫了終止安裝程式碼。如果你的安裝程式有很多指令碼命令,那麼函式是很有用的。如果你把程式碼放在函式中,你會節約拷貝時間,並且可以更好地維護程式碼。      回撥函式在某些事件觸發時被呼叫。但是回撥函式是可選項,不是必須要寫的。比如,你想要在安裝程式的時候彈出一個歡迎介面,你可以定義.onInit函式。NSIS編譯器就會在安裝開始的時候呼叫這個函式。
Function .onInit
  MessageBox MB_YESNO "This will install My Program. Do you wish to continue?" IDYES gogogo
    Abort
  gogogo:
FunctionEnd
Abort函式在回撥函式中有特殊的含義,每一個回撥函式中都有不同的含義,具體要參考回撥函式的說明。
指令碼的使用
程式碼邏輯
順序、條件、迴圈是現代程式語言的三個基本的結構,在該指令碼中,你可以使用StrCmp、IntCmp、IfErrors、Goto等來對應這些結構。但是有更好的方法來實現,就是使用LogicLib。作為對比:
StrCmp $0 'some value' 0 +3
  MessageBox MB_OK '$$0 is some value'
  Goto done
StrCmp $0 'some other value' 0 +3
  MessageBox MB_OK '$$0 is some other value'
  Goto done
# else
  MessageBox MB_OK '$$0 is "$0"'
done:
上面這段程式碼是未使用LogicLib的程式碼,再看看使用LogicLib的程式碼:
${If} $0 == 'some value'
  MessageBox MB_OK '$$0 is some value'
${ElseIf} $0 == 'some other value'
  MessageBox MB_OK '$$0 is some other value'
${Else}
  MessageBox MB_OK '$$0 is "$0"'
${EndIf}
相比之下,後者就顯得結構清晰、簡潔。
要使用LogicLib只需要在指令碼前新增引用:
!include LogicLib.nsh
變數:
你可以使用Var命令來定義你的變數,這個變數是全域性的,你可以在任何段和函式中使用。
Var BLA ;定義一個變數BLA

Section bla

  StrCpy $BLA "123" ;這裡你就可以使用BLA變數,這裡要在BLA前面加上$字首。

SectionEnd
另外還有一個變數堆疊,你可以使用push、pop命令來操作這些變數。
對於共享模式的程式碼,一共有20個註冊變數($0-$9, $R0- $R9),這些變數不需要申明,不過你最好在使用之前儲存初值,使用完之後恢復初值。還有一點就是這些變數的使用要按照堆疊的方式,first-in-last-out。
Function bla

  Push $R0
  Push $R1

    ...code...

  Pop $R1
  Pop $R0

FunctionEnd
除錯指令碼
除錯程式最好的辦法就是列印輸出。NSIS指令碼的除錯也是使用列印的方法:
MessageBoxs和DetailPrint。要想得到所偶變數的值可以使用外掛DumpState。
預設情況下,所有的操作都會解除安裝Windows的日誌中,你可以在windows日誌檢視。
指令碼的執行
當用戶執行安裝或者解除安裝程式的時候(似乎就這兩種情況了),頁Page會按照它們在指令碼檔案中的順序出現。除了段中的程式碼,還有回撥函式也可能在段的程式碼執行之前先執行,比如說.onInit函式將會在安裝程式所有頁面出現之前先被執行。還有頁Page的回撥函式。
編譯命令
編譯命令在你的計算機上編譯指令碼的時候執行。這個可以被用來做條件編譯、包含標頭檔案、執行應用程式、改變工作目錄等。最常用的就是define定義,define是編譯期常量,你可以定義你的產品版本,並在指令碼中使用。例如:
!define VERSION "1.0.3"
Name "My Program ${VERSION}"
OutFile "My Program Installer - ${VERSION}.exe"
另一個用法是巨集macro。使用巨集定義對於一般程式設計師來說應該不陌生,它可以簡化程式碼的編寫,其實意義上類似於函式。巨集也是在編譯器替換、插入、執行的。比如下面的定義:
!macro MyFunc UN
Function ${UN}MyFunc
  Call ${UN}DoRegStuff
  ReadRegStr $0 HKLM Software\MyProgram key
  DetailPrint $0
FunctionEnd
!macroend

!insertmacro MyFunc ""
!insertmacro MyFunc "un."
巨集可以幫助你避免寫重複的程式碼,上面這兩個!insertmacro語句插入了兩個函式,一個用來安裝程式時使用MyFunc,一個在解除安裝程式時使用un.MyFunc。兩個函式是相同的。
編譯
寫好指令碼之後就是編譯指令碼了,makeNSIS.exe就是NSIS的編譯器,它吃進指令碼吐出安裝程式。當然你可以使用整合的編譯環境比如說HM NIS Edt,編譯的時候會檢查指令碼的語法等,並給出警告和錯誤提示。也可以在Linux、BSD或者Mac OS X上編譯Windows程式,具體看NSIS的使用者手冊。
介面
Modern UI不僅是一個自定義資原始檔,而且還提供了大量的介面元素。
外掛
其實就是dll檔案,這些檔案一般用C/C++,Delphi或者其他語言編寫,作為NSIS的一個強大的擴充套件。
引入外掛的語句:
DLLName::FunctionName "parameter number 1" "parameter number 2" "parameter number 3"
每一個外掛根據不同的引數都有不同的要求,有些不需要引數,有些你可以給出很多引數:
nsExec::ExecToLog '"${NSISDIR}\makensis.exe" /CMDHELP'
InstallOptions::dialog "$PLUGINSDIR\test.ini"
NSISdl::download http://download.nullsoft.com/winamp/client/winamp291_lite.exe $R0
在NSIS的安裝目錄下有一個外掛目錄,NSIS會預設搜尋這個目錄、並列出可用的函式,當然你也可以使用!addplugindir命令來引入新的外掛目錄。
NSIS的釋出版已經自帶了一些外掛,當然你也可以自己寫外掛,NSIS手冊上有介紹。
2. 命令列用法
MakeNSIS用法
makensis [option | script.nsi | - [...]]
基本上現在我沒有用到命令列,現在直接使用整合環境。
安裝、解除安裝用法
可以設定靜默安裝、解除安裝。設定安裝在預設的安裝目錄等。
3. 指令碼說明
指令碼檔案格式
指令碼檔案只是一個寫了指令碼語句的文字檔案。
命令
command [引數...]
比如:File "MyFile"
註釋
以#或者;開頭語句就是註釋語句,也可以使用C風格的註釋。比如:
; Comment
# Comment

# Comment \
    Another comment line (see `Long commands` section below)

/*
Comment
Comment
*/

Name /* comment */ mysetup

File "myfile" ; Comment
外掛
plugin::command [引數...]   比如:
nsExec::Exec "MyFile"
數字
NSIS指令碼支援三種進位制的數字,八進位制,十進位制,十六進位制。
顏色必須使用十六進位制。例如:
IntCmp 1 0x1 lbl_equal

SetCtlColors $HWND CCCCCC
字串
如果字串中有空白字元,要使用雙引號包起來:
MessageBox MB_OK "Hi there!"
一共可以使用單引號、雙引號、反單引號三種,並且可以巢狀。你也可以使用$\符號來跳出引號。
MessageBox MB_OK "I'll be happy" ; this one puts a ' inside a string  列印:I'll be happy
MessageBox MB_OK 'And he said to me "Hi there!"' ; this one puts a " inside a string 列印:And he said to me "Hi there!"
MessageBox MB_OK `And he said to me "I'll be happy!"` ; this one puts both ' and "s inside a string 列印: And he said to me "I'll be happy!"
MessageBox MB_OK "$\"A quote from a wise man$\" said the wise man" ; this one shows escaping of quotes 列印:"A quote from a wise man" said the wise man
變數
變數以$開頭,定義及用法例如:
Var MYVAR

StrCpy $MYVAR "myvalue"
長命令
類似於C類語言,可以使用反斜槓(\)來換行繼續上一行的語句。這個對於命令和註釋都適用。
CreateShortCut "$SMPROGRAMS\NSIS\ZIP2EXE project workspace.lnk" \
    "$INSTDIR\source\zip2exe\zip2exe.dsw"
# A comment \
    still a comment here...
配置檔案
如果在配置目錄下存在一個"nsisconf.nsh"檔案,預設它將會在所有指令碼之前包含進來(除非/NOCONFIG),Windows平臺上這個配置目錄就是makensis.exe所在目錄。其他平臺下這個值在安裝時期設定並且預設值是$PREFIX/etc/。
變數
使用者自定義變數
Var命令,可以使用Var命令定義自定義的變數,這樣定義出來的變數是全域性的,且不論你是在段中還是在函式中定義。
但是如果在段或者是函式中定義變數要加上/GLOBAL字首:
Var example

Function testVar
  Var /GLOBAL example2  ;看這裡的定義

  StrCpy $example "example value"
  StrCpy $example2 "another example value"
FunctionEnd
其他可寫的變數

$0, $1, $2, $3, $4, $5, $6, $7, $8, $9, $R0, $R1, $R2, $R3, $R4, $R5, $R6, $R7, $R8, $R9

這些變數可以像自定義變數那樣使用,不過這些變數一般在共享函式和巨集裡面使用。正如篇前所說,最好在使用的過程中記錄和重新裝載這些變數的初值。這些變數也可以用來和外掛通訊,因為外掛也可以使用這些變數。

$INSTDIR

安裝目錄,可以用StrCpy、ReadRegStr、ReadINIStr來修改。比如.onInit函式需要做一個更高階的安裝檢測。

需要注意的是在解除安裝程式碼中,$INSTDIR所表示的目錄正是解除安裝檔案所在目錄。我們並沒有必要保證這個值要和安裝程式中的一致,比如說,你把解除安裝檔案寫在了#WINDIR中,並且使用者沒有移動它,那麼寫在檔案中的$INSTDIR就是$WINDIR。如果你把解除安裝檔案放在了其他位置,那麼你最好把這個路徑記錄下來,並在解除安裝的時候可以讀取,以便解除安裝程式。

$OUTDIR

當前的輸出目錄,使用SetOutPath,StrCpy、ReadRegStr、ReadINIStr等修改。

$CMDLINE

安裝程式的命令列。

$LANGUAGE

標識當前使用的語言的ID,例如English是1033,你可以在.onInit中修改它。

常量

常量也可以用在安裝屬性設定中。

需要注意的是,並非所有常量都可以執行在所有作業系統上,比如$CDBURN只能工作在Windows XP及以上版本中。

$PROGRAMFILES, $PROGRAMFILES32, $PROGRMAFILES64

預設安裝目錄是C:\Program Files,但是這個會在執行時檢測,在Windows x64平臺上,$PROGRAMFILES、$PROGRAMFILES32表示C:\Program Files (x86),$PROGRAMFILES64表示C:\Program Files。

還有很多這樣的常量,這裡就不一一列舉了,可以檢視NSIS使用者手冊。這些變數就是提供了設定系統中一些引數的簡單方式。

字串中的常量

$$:表示$

$\r:表示\r

$\n:表示\n

$\t:表示\t

標籤

標籤用於Goto命令、或者是一些分支結構(IfErrors, MessageBox, IfFileExists, StrCmp)。標籤必須位於段或者函式內部。並且標籤是區域性的,也就是段或者函式的內部才可以訪問。定義方法比如:

MyLabel:

標籤的命名不能以 -、+、!、$、或者0-9開頭,使用標籤的時候要注意空字串("")和0都表示下一個指令的意思,以一個點號(.)開頭的標籤表示擁有全域性作用域,意思是你可以在任何函式或者段中跳到這個標籤。但是你不能從安裝程式碼跳到解除安裝程式碼,反之亦然。

相對跳轉

你可以在可以使用標籤的地方使用相對跳轉。用法是如下:+1表示跳轉至嚇一跳指令;+2表示忽略下一條指令、直接跳轉到下下一條命令;-2表示往回跳兩條指令,+10表示忽略後面的9跳指令、直接跳至第10條指令。

指令就是安裝程式執行時的所有命令,MessageBox、Goto、GetDllVersion、FileRead、SetShellVarContent都是指令。AddSize、Section、SectionGroup、SectionEnd、SetOverWrite,Name、SetFont、LangString、這些都不是指令、因為它們在編譯時執行。

 Goto +2
 MessageBox MB_OK "You will never ever see this message box"
 MessageBox MB_OK "The last message was skipped, this one should be shown"
 Goto +4
 MessageBox MB_OK "The following message will be skipped"
 Goto +3
 MessageBox MB_OK "You will never ever see this message box"
 Goto -3
 MessageBox MB_OK "Done"

注意如果想對跳轉後面有插入巨集,那麼巨集不會被視為一條指令,因為巨集在跳轉執行之前會被展開。這一點上巨集的使用類似C類語言。比如:

!macro relative_jump_test
  MessageBox MB_OK "first macro line"
  MessageBox MB_OK "second macro line"
!macroend

Goto +2
!insertmacro relative_jump_test

Goto將會跳轉到"second macro ine"。

頁 Pages

每一個非靜默安裝的NSIS安裝程式,都有一組安裝頁。這個頁可以是NSIS內建的頁,也可以是使用者的函式建立的自定義頁。

使用指令碼你可以控制頁的順序、顯示和行為,你可以跳過頁、把他們畫成白板、強制使用者停留在某個頁面直到滿足一定的條件,顯示一個Read me頁、顯示自定義的輸入頁面等等。

這裡有兩個和頁相關的命令,Page和UninstPage。第一個命令新增一個頁到安裝程式,第二個新增一個頁到解除安裝程式。還有一個命令PageEx,他允許你新增一個頁,並附加一些選項。這個命令可以讓你把指定的頁替換掉預設的頁。

順序

頁的順序就是Page、UninstPage、PageEx在指令碼中出現的順序,比如說:

 Page license
 Page components
 Page directory
 Page instfiles
 UninstPage uninstConfirm
 UninstPage instfiles

上面的程式碼,將會首先顯示一個許可證頁、接著是元件頁、接著是選擇安裝目錄頁、接著是執行的段的安裝日誌頁。解除安裝程式將會首先顯示一個解除安裝確認頁、接著是解除安裝日誌頁。

為了向後相容,如果沒有寫任何安裝程式的Page命令指令碼的話,以下頁面將會自動新增:license許可證頁(如果指定LicenceText和LicenceData的話),components元件頁(如果ComponentText指定了並且有超過一個可視段),directory目錄頁(如果DirText指定了的話)和安裝日誌頁。如果沒有解除安裝頁命令的話,下面的解除安裝頁將會被新增:解除安裝確認頁和解除安裝日誌頁。這些方法現在已經被棄用,推薦使用頁。

頁選項

每一個頁都有一組資料定義了頁長什麼樣子,有什麼動作。下面描述了每一種頁使用那些資料以及如何設定。回撥函式不會再本段描述。

下面這個列表列出了命令如何影響具體的頁面型別,除非特別說明,下面的命令可被用於PageEx塊的內部和外部,如果用在PageEx塊內部,它們僅僅會影響用PageEx設定的當前頁,否則它們會影響所有頁面的預設行為。

License page

  • LicenseText
  • LicenseData
  • LicenseForceSelection

Components selection page

  • ComponentText

Directory selection page

  • DirText
  • DirVar - can only be used in PageEx
  • DirVerify

Un/Installation log page

  • DetailsButtonText
  • CompletedText

Uninstall confirmation page

  • DirVar - can only be used in PageEx
  • UninstallText

回撥函式

每個內建頁都有三個回撥函式:pre-function、show-creation和leave-function。pre-function在頁建立之前呼叫,show-creation正好在頁建立之後且在頁顯示之前呼叫,leave-funtion在使用者點選下下一步按鈕之後並還停留在當頁的時候呼叫。

pre-function允許你使用Abort跳過頁

show-function允許你使用CreateFont、SetCtlColors、SendMessage和其他函式修改使用者介面

leave-function允許你使用Abort函式強制使用者停留在當頁

一個自定義頁僅有兩個回撥函式,一個是強制性的建立頁函式,一個是leave-function,就像內建頁的回撥函式一樣。例子:

 Page license skipLicense "" stayInLicense
 Page custom customPage "" ": custom page"
 Page instfiles

 Function skipLicense
   MessageBox MB_YESNO "Do you want to skip the license page?" IDNO no
     Abort
   no:
 FunctionEnd

 Function stayInLicense
   MessageBox MB_YESNO "Do you want to stay in the license page?" IDNO no
     Abort
   no:
 FunctionEnd

 Function customPage
   GetTempFileName $R0
   File /oname=$R0 customPage.ini
   InstallOptions::dialog $R0
   Pop $R1
   StrCmp $R1 "cancel" done
   StrCmp $R1 "back" done
   StrCmp $R1 "success" done
   error: MessageBox MB_OK|MB_ICONSTOP "InstallOptions error:$\r$\n$R1"
   done:
 FunctionEnd

安裝解除安裝 頁 [Uninst]Page

custom [creator_function] [leave_function] [caption] [/ENABLECANCEL]
  OR
internal_page_type [pre_function] [show_function] [leave_function] [/ENABLECANCEL]

新增一個安裝/解除安裝頁,其中internal_page_type可以是:

license - 許可證頁

componenets - 元件選擇頁

directory - 目錄選擇頁

instfiles - 執行段中的安裝頁

uninstConfirm - 解除安裝的確認頁

安裝的最後一頁,有一個取消按鈕用來阻止確認。如果要這樣的話,那麼就要使用/ENABLECALCEL

擴充套件頁 PageEx

[un.](custom|uninstConfirm|license|components|directory|instfiles)

新增一個安裝頁,或者解除安裝頁(如果使用un.字首),每一個PageEx都必須有一個PageExEnd與之對應。在這個頁中你可以設定關於這個頁(不影響其他頁)的選項,如果這些選項沒有設定,那麼選項會使用外部PageEx的設定,如果什麼都沒有,那麼會使用預設值。設定二級標題的話使用Caption或者SubCaption來設定預設值。要同PageEx一同設定回撥函式的話,使用PageCallbacks。例子:

 PageEx license
   LicenseText "Readme"
   LicenseData readme.rtf
 PageExEnd

 PageEx license
   LicenseData license.txt
   LicenseForceSelection checkbox
 PageExEnd

擴充套件頁結束 PageExEnd

結束一個PageEx塊

頁回撥函式 PageCallbacks

([creator_function] [leave_function]) | ([pre_function] [show_function] [leave_function])

設定用PageEx定義的頁,只能在一個PageEx塊內部使用。例子:

PageEx license
  PageCallbacks licensePre licenseShow licenseLeave
PageExEnd

段 Sections

一個NSIS安裝程式都有一個或多個段組成,每個段都按照下面的規則進行建立、修改、結束。

每個段包含0個或多個指令

每個段根據安裝程式執行的順序進行,如果設定了ComponentText,使用者可以使每個可見的段有效或者失效

如果一個段的名字是“Uninstall”,或者有一個“un.”的字首,就是一個解除安裝段

段命令

AddSize

size_kb 告訴安裝程式當前段需要一個額外的"size_kb"千位元組硬碟空間,這個只在一個段中有效,在外部一個段中或者函式中式無效的。例子:

Section
AddSize 500
SectionEnd
[/o] [([!]|[-])section_name] [section_index_output]
開始一個段的定義,如果段名字為空、或者忽略了、或者以一個"-"開頭,那麼將會隱藏這個段,並且使用者也不能禁用它,如果設定了section_index_output,這個引數就是!define標識的段序列(這個可以用SectionSetText設定)。如果段名字以“!”開頭,那麼段將會用粗體顯示。如果設定了/o,那麼段預設不會被選中。
Section "-hidden section"
SectionEnd

Section # hidden section
SectionEnd

Section "!bold section"
SectionEnd

Section /o "optional"
SectionEnd

Section "install something" SEC_IDX
SectionEnd
要訪問段序號,必須使用大括號,並且指令碼程式碼必須位於段的後面。
Section test1 sec1_id
SectionEnd

Section test2 sec2_id
SectionEnd

Function .onInit
  SectionGetText ${sec2_id} $0
  MessageBox MB_OK "name of ${sec2_id}:$\n$0" # will correctly display 'name of 1: test2'
FunctionEnd
Function .onInit
  SectionGetText ${sec2_id} $0
  MessageBox MB_OK "name of ${sec2_id}:$\n$0" # will incorrectly display 'name of ${sec2_id}: test1'
    # plus a warning stating:
    #   unknown variable/constant "{sec2_id}" detected, ignoring
FunctionEnd

Section test1 sec1_id
SectionEnd

Section test2 sec2_id
SectionEnd
段結束 SectionEnd
這個表示一個段的結束
段型別 SectionIn
insttype_index [insttype_index] [RO]
這個命令指定當前的段預設屬於哪一個安裝型別,你也可以為一個段指定多個SectionIn。如果你指定了RO引數,那麼這個段就是隻讀的,使用者不能修改它的狀態,第一個InstType標號為1,下一個是2,以次類推。
InstType "full"
InstType "minimal"

Section "a section"
SectionIn 1 2
SectionEnd

Section "another section"
SectionIn 1
SectionEnd
段組 SectionGroup
[/e] section_group_name [index_output]
這個命令插入一個段組,並且必須以SectionGroupEnd結束。它應該包含至少一個段,如果段組名字以“!”開頭,那麼它將會以粗體的形式顯示。如果設定/e,那麼預設會展開段組,如果指定了index_output,這個引數是用!define宣告的段序號section index。如果名字以“un.”開頭,那麼這是一個解除安裝段組。
SectionGroup "some stuff"
Section "a section"
SectionEnd
Section "another section"
SectionEnd
SectionGroupEnd
段組結束 SectionGroupEnd

            
           

相關推薦

程式打包 NSIS指令碼

這段時間負責公司的程式的打包,於是就學習了一下NSIS的指令碼,結果是英文的,所以就有了翻譯一下,順便學習一下的想法。 編寫NSIS程式打包指令碼,只需要用一個文字編輯器,最好是帶有行號的,這樣會有助於讀懂編譯錯誤提示。下面開始學習打包。 1. NSIS指令碼的基本結構 instal

Python程式打包PyInstaller

1、背景說明 【Python版本】Python 2.7.14 【系統平臺】Windows 7 【優缺點描述】據說PyInstaller 比較慢,但是PyInstaller打包出來的exe簡潔(就一個檔案),沒有一堆的dll和配置檔案等。 2、安裝方式 pip install PyInstall

歸一化二階系統的階躍響應matlab GUI+程式打包實現

歸一化系統的二階階躍響應之matlab GUI+程式打包實現 設計程式效果展示 1.1.list選項:選擇第一項效果展示 1.2.list選項:選擇第二項效果展示 1.3.list選項:選擇第三項效果展示 1.4.list選項:選擇第四項效果展示 設計思想 為了研究

少說話多寫程式碼Python學習066——python程式打包01 編譯安裝

程式開發完成後,我們需要部署給使用者使用,一般我們都會將其打包。比如大家在使用windows系統時,安裝QQ、微信、除IE外的各種瀏覽器、看視訊軟體、word等,都會先下載一個安裝包,一般是都是一個EXE或者有多個資料夾的檔案,裡面包含了一個exe。我們點選exe後,按照提示一步一步,往下安裝。

使用NSIS指令碼嚮導進行打包

nsis使用: 啟動NSIS程式主介面,選擇“視覺化指令碼編輯器(VNISEdit)”選單,開始製作自己的安裝包 選擇“使用指令碼嚮導建立新的指令碼檔案”,確定 進步指令碼嚮導,下一步 第一步,這裡填寫應用程式的一些基本資訊,下一步 第二步,這裡是選擇安裝包

雜記(3)chrome擴充套件程式開發在目標頁面執行JS指令碼

一、背景說明在雜記(2)中,我們寫了JS指令碼在chrome瀏覽器的開發者模式console頁面執行,用於搶bus票,但這個指令碼有個弊端是當頁面重新整理後,指令碼會自動清除,無法再執行,如何解決呢?我們可以開發一個chrome外掛,啟動這個外掛,當chrome瀏覽器一開啟目

Linux 下qt 程式打包釋出(使用linuxdelpoyqt ,shell 指令碼

linux qt 程式打包釋出 1.linuxdeployqt 安裝 最簡單的方法直接下載編譯好的 linuxdeployqt-x86_64.AppImage檔案,將其改名字為linuxdeployqt,並chmod a+x,然後複製到 /usr/loc

程式開發指令碼語言WXS

WXS WXS(WeiXin Script)是小程式的一套指令碼語言,結合 WXML,可以構建出頁面的結構。 注意 wxs 不依賴於執行時的基礎庫版本,可以在所有版本的小程式中執行。 wxs 與 javascript 是不同的語言,有自己的語法,並不和 javasc

關於NSIS指令碼操作靜默安裝第三方程式+判斷電腦位數

在NSIS指令碼中,呼叫外部程式的方法有ExecShell以及ExecWait: ExecShell 使用 ShellExecute [譯者注: Windows 的外殼關聯] 執行指定的程式。注意:

java程式釋出jre篇 java程式打包成exe可執行安裝包以便安裝程式

Java開發程式,釋出時總要考慮的問題就是怎麼在使用者的機器上裝好JRE。要考慮的問題很多:使用者有沒有能力獨自安裝JRE,使用者已有的 JRE 和我們需要的版本是不是一致,會不會出現版本問題,等等。使用.NET要考慮的問題就少些。現在.NET CLR似乎已經很普及了,看

Qt程式打包(使用windeployqt.exe查詢依賴庫)

Qt 官方開發環境使用的動態連結庫方式,在釋出生成的exe程式時,需要複製一大堆 dll,如果自己去複製dll,很可能丟三落四,導致exe在別的電腦裡無法正常執行。因此 Qt 官方開發環境裡自帶了一個工具:windeployqt.exe。以官方 Qt 5.7.0+Min

python學習記錄---------PYQT5做工具(3)將python程式打包成exe檔案

工具/版本(1)安裝環境:Windows7 64bit(2)使用版本Python3.6(3)pyqt5python檔案打包成exe格式,需要用到自帶的模組 pyinstaller一、pyinstaller安裝開啟cmd,輸入pip install pyinstaller回車,

Unity資源打包Assetbundle

nas rar 啟用 大致 ebp 掛載 href 交叉 bundle 本文原創版權歸 csdn janeky 全部。轉載請具體註明原創作者及出處,以示尊重。 作者:janeky 原文:http://blog.csdn.net/janeky/article/detail

2018第一發:記一次【Advanced Installer】打包

4.0 config文件 cli 簡單 官網 class 用法 process file 一、前言 2017年最後幾天,你們都高高興興的跨年,博主還在加班制作.net安裝包。因為年前要出來第一版的安裝包,所以博主是加班加點啊。本來想用VS自帶的制作工具,不過用過的人都知道

4.6 基於Spring-Boot的Mysql+jpa的增刪改查學習記錄 > 我的程式路:第三十六章

    1.專案結構       -JDK  1.8       -SpringBoot  2.0.6     &nbs

QT5的程式打包釋出(將QT5的工程專案打包成一個exe程式) QT5的程式打包釋出(將QT5的工程專案打包成一個exe程式

QT5的程式打包釋出(將QT5的工程專案打包成一個exe程式) 最近,在學習QT5的過程中,想嘗試著把自己寫的工程程式給打包釋出出來,在任何一臺windows系統都能執行,這樣就不會限於電腦需不需要安裝QT安裝包了。 首先,先介紹自己使用的環境。我使用的QT版本是。我的電

Python程式打包成exe的一些坑

今天寫了一個專案,Python專案,需要在win7上跑起來,我想,這不是簡單的不行麼,直接上Pyinstaller不就完了? 但是後來,我發覺我真是too young too simple。 為什麼這麼說呢,因為我是堅定的Linux黨,沒Windows!!!!!這就說明什麼呢,當你在linux上Pyins

程式學習旅----open-data web-view 以及 canvas、map

<open-data type="userAvatarUrl"></open-data> <open-data type="userGender" lang="zh_CN"></open-data> <view></view>

程式學習旅----圖片image媒體元件camera、audio、video、live-player、live-pusher

<!--pages/image/image.wxml--> <text>這是一個image元件</text> <!-- <image src='../../images/0.jpg'></image> <image src='

程式學習旅---表單元件 picker picker-view 實現日期 區域 聯動選擇

Page({ /** * 頁面的初始資料 */ data: { cityList: ['北京', '上海', '深圳', '廣州'], cityIndex: 1, time: '17:01', date: '2018-6-28',