1. 程式人生 > >NSIS 簡易教程(二)

NSIS 簡易教程(二)

 ; 標頭檔案
!include "MUI.nsh"
!include "Sections.nsh"
!include "LogicLib.nsh"
#=========================================================================================
#=========================================================================================
; 巨集定義
!define STR_AppName "易極OA協同辦公系統"
!define STR_Version "1.0"
!define STR_Publisher "億級空間"
!define STR_HomepageUrl "http://www.eg-oa.com"
!define REG_AppBase "Software\EgOA"
!define REG_Uninstall "Software\Microsoft\Windows\CurrentVersion\Uninstall\${STR_AppName}"
#=========================================================================================
#=========================================================================================
; MUI 設定
!define MUI_ABORTWARNING
!define MUI_ICON "${NSISDIR}\Contrib\Graphics\Icons\orange-install.ico"
!define MUI_UNICON "${NSISDIR}\Contrib\Graphics\Icons\orange-uninstall.ico"
!define MUI_WELCOMEFINISHPAGE_BITMAP "${NSISDIR}\Contrib\Graphics\Wizard\orange.bmp"
!define MUI_UNWELCOMEFINISHPAGE_BITMAP "${NSISDIR}\Contrib\Graphics\Wizard\orange-uninstall.bmp"
!define MUI_HEADERIMAGE
!define MUI_HEADERIMAGE_BITMAP "${NSISDIR}\Contrib\Graphics\Header\orange.bmp"
!define MUI_HEADERIMAGE_UNBITMAP "${NSISDIR}\Contrib\Graphics\Header\orange-uninstall.bmp"
; 語言選擇設定
!define MUI_LANGDLL_REGISTRY_ROOT "HKCU"
!define MUI_LANGDLL_REGISTRY_KEY "${REG_Uninstall}"
!define MUI_LANGDLL_REGISTRY_VALUENAME "NSIS:Language"
; 元件頁面設定
!define MUI_COMPONENTSPAGE_SMALLDESC
; 開始選單頁面設定
var STR_GroupName
var TMP_GroupName
!define MUI_STARTMENUPAGE_REGISTRY_ROOT "HKCU"
!define MUI_STARTMENUPAGE_REGISTRY_KEY "${REG_Uninstall}"
!define MUI_STARTMENUPAGE_DEFAULTFOLDER "${STR_AppName}"
!define MUI_STARTMENUPAGE_REGISTRY_VALUENAME "NSIS:StartMenuDir"
; 完成安裝頁面設定
!define MUI_FINISHPAGE_RUN "C:\Program Files\Internet Explorer\iexplore.exe -new www.google.com"
!define MUI_FINISHPAGE_SHOWREADME "$INSTDIR/help/index.html"
!define MUI_FINISHPAGE_SHOWREADME_TEXT "$(LNG_ShowHelp)"
!define MUI_FINISHPAGE_LINK "${STR_AppName} $(LNG_Homepage): ${STR_HomepageUrl}"
!define MUI_FINISHPAGE_LINK_LOCATION "${STR_HomepageUrl}"
; 安裝頁面
!insertmacro MUI_PAGE_WELCOME
!insertmacro MUI_PAGE_LICENSE "$(LNG_License)"
!insertmacro MUI_PAGE_DIRECTORY
!insertmacro MUI_PAGE_COMPONENTS
!insertmacro MUI_PAGE_STARTMENU Application $STR_GroupName
!insertmacro MUI_PAGE_INSTFILES
!insertmacro MUI_PAGE_FINISH
; 解除安裝頁面
!insertmacro MUI_UNPAGE_WELCOME
!insertmacro MUI_UNPAGE_CONFIRM
!insertmacro MUI_UNPAGE_INSTFILES
!insertmacro MUI_UNPAGE_FINISH
; 語言支援
!insertmacro MUI_LANGUAGE "SimpChinese"
;!insertmacro MUI_LANGUAGE "English"
#=========================================================================================
#=========================================================================================
; 語言相關字串
LicenseLangString LNG_License ${LANG_ENGLISH} ".\resource\EULA.txt"
LangString LNG_BrandingText ${LANG_ENGLISH} "haijd Software"
LangString LNG_DefaultInstation ${LANG_ENGLISH} "Default installtion"
LangString LNG_FullInstation ${LANG_ENGLISH} "Full installtion"
LangString LNG_MinimalInstation ${LANG_ENGLISH} "Minimal installtion"
LangString LNG_Help ${LANG_ENGLISH} "Help"
LangString LNG_Homepage ${LANG_ENGLISH} "Homepage"
LangString LNG_Uninstall ${LANG_ENGLISH} "Uninstall"
LangString LNG_ShowHelp ${LANG_ENGLISH} "Show Help"
LangString LNG_ProgramFile ${LANG_ENGLISH} "Program Files"
LangString LNG_EgOA ${LANG_ENGLISH} "Main program"
LangString LNG_ServerEnv ${LANG_ENGLISH} "Services environment."
LangString LNG_CreateShortcut ${LANG_ENGLISH} "Create Shortcut"
LangString LNG_ProgramMenuShortcutGroup ${LANG_ENGLISH} "Program Menu Shortcut Group"
LangString LNG_DesktopShortcut ${LANG_ENGLISH} "Desktop Shortcut"
LangString LNG_QuickLaunchShortcut ${LANG_ENGLISH} "Quick Launch Bar Shortcut"
LangString LNG_ProgramFileDesc ${LANG_ENGLISH} "Install ${STR_AppName} program files."
LangString LNG_EgOADesc ${LANG_ENGLISH} "Install ${STR_AppName} main program files."
LangString LNG_ServerEnvDesc ${LANG_ENGLISH} "Install ${STR_AppName} services environment."
LangString LNG_CreateShortcutDesc ${LANG_ENGLISH} "Create shortcuts to launch the program easy."
LicenseLangString LNG_License ${LANG_SIMPCHINESE} ".\resource\EULA.txt"
LangString LNG_BrandingText ${LANG_SIMPCHINESE} "haijd Software"
LangString LNG_DefaultInstation ${LANG_SIMPCHINESE} "預設安裝"
LangString LNG_FullInstation ${LANG_SIMPCHINESE} "完全安裝"
LangString LNG_MinimalInstation ${LANG_SIMPCHINESE} "最小安裝"
LangString LNG_Help ${LANG_SIMPCHINESE} "幫助"
LangString LNG_Homepage ${LANG_SIMPCHINESE} "主頁"
LangString LNG_Uninstall ${LANG_SIMPCHINESE} "解除安裝"
LangString LNG_ShowHelp ${LANG_SIMPCHINESE} "檢視幫助"
LangString LNG_ProgramFile ${LANG_SIMPCHINESE} "程式檔案"
LangString LNG_EgOA ${LANG_SIMPCHINESE} "主程式"
LangString LNG_ServerEnv ${LANG_SIMPCHINESE} "服務環境"
LangString LNG_CreateShortcut ${LANG_SIMPCHINESE} "建立快捷方式"
LangString LNG_ProgramMenuShortcutGroup ${LANG_SIMPCHINESE} "程式選單快捷方式組"
LangString LNG_DesktopShortcut ${LANG_SIMPCHINESE} "桌面快捷方式"
LangString LNG_QuickLaunchShortcut ${LANG_SIMPCHINESE} "快速啟動欄快捷方式"
LangString LNG_ProgramFileDesc ${LANG_SIMPCHINESE} "安裝 ${STR_AppName} 程式檔案。"
LangString LNG_EgOADesc ${LANG_SIMPCHINESE} "安裝 ${STR_AppName} 主程式檔案"
LangString LNG_ServerEnvDesc ${LANG_SIMPCHINESE} "安裝 ${STR_AppName} 服務環境"
LangString LNG_CreateShortcutDesc ${LANG_SIMPCHINESE} "建立用於快速訪問的快捷方式。"
#=========================================================================================
#=========================================================================================
; 雜項
Name "${STR_AppName} ${STR_Version}"
OutFile "${STR_AppName}_${STR_Version}.exe"
InstallDir "$PROGRAMFILES\egoa"
InstallDirRegKey HKCU "${REG_AppBase}" "InstallDir"
ShowInstDetails SHOW
ShowUnInstDetails SHOW
BrandingText "$(LNG_BrandingText)"
#=========================================================================================
#=========================================================================================
; 安裝型別
!ifndef NOINSTTYPES
    InstType "$(LNG_DefaultInstation)"
    InstType "$(LNG_FullInstation)"
    InstType "$(LNG_MinimalInstation)"
!endif
#=========================================================================================
#=========================================================================================
; 程式檔案
Section
    LogSet on
SectionEnd
SectionGroup /e "$(LNG_ProgramFile)" SEC_ProgramFile
    Section "$(LNG_EgOA)" SEC_EgOA
    SectionIn 1 2 3 RO
    SetOverwrite ON
    SetOutPath "$INSTDIR"
    File ".\resource\egoa.ico"
    File /r ".\resource\program"
    SectionEnd
    Section "$(LNG_ServerEnv)" SEC_ServerEnv
    SectionIn 1 2 3 RO
    SetOutPath "$INSTDIR"
    File /r ".\resource\server"
    File /r ".\resource\database"
    SectionEnd
    Section "$(LNG_Help)" SEC_Help
    SectionIn 1 2
    SetOutPath "$INSTDIR"
    File /r ".\resource\help"
    SectionEnd
SectionGroupEnd
#=========================================================================================
#=========================================================================================
; 快捷方式
SectionGroup "$(LNG_CreateShortcut)" SEC_Shortcut
    ; 建立開始選單程式組
    SectionGroup "$(LNG_ProgramMenuShortcutGroup)" SEC_ProgramMenuShortcutGroup
    Section "${STR_AppName}" SEC_AppNameShortcut
        SectionIn 1 2
        CreateDirectory "$SMPROGRAMS\$STR_GroupName"
        WriteINIStr "$SMPROGRAMS\$STR_GroupName\${STR_AppName}.url" "InternetShortcut" "URL" "$INSTDIR/program/www/index.html"
    SectionEnd
    Section "${STR_AppName} $(LNG_Help)" SEC_HelpShortcut
        SectionIn 1 2
        CreateDirectory "$SMPROGRAMS\$STR_GroupName"
        WriteINIStr "$SMPROGRAMS\$STR_GroupName\${STR_AppName} $(LNG_Help).url" "InternetShortcut" "URL" "$INSTDIR/program/www/help/index.html"
    SectionEnd
    Section "${STR_AppName} $(LNG_Homepage)" SEC_HomePageShortcut
        SectionIn 1 2
        CreateDirectory "$SMPROGRAMS\$STR_GroupName"
        WriteINIStr "$SMPROGRAMS\$STR_GroupName\${STR_AppName} $(LNG_Homepage).url" "InternetShortcut" "URL" "${STR_HomepageUrl}"
    SectionEnd
    Section "$(LNG_Uninstall) ${STR_AppName}" SEC_UninstallShortcut
        SectionIn 1 2
        CreateDirectory "$SMPROGRAMS\$STR_GroupName"
        CreateShortCut "$SMPROGRAMS\$STR_GroupName\$(LNG_Uninstall) ${STR_AppName}.lnk" "$INSTDIR\Uninstall.exe"
    SectionEnd
    SectionGroupEnd
    ; 桌面
    Section "$(LNG_DesktopShortcut)" SEC_DesktopShortcut
    SectionIn 1 2
    WriteINIStr "$DESKTOP\${STR_AppName}.url" "InternetShortcut" "URL" "http://127.0.0.1/"
    SectionEnd
    ; 快速啟動
    Section "$(LNG_QuickLaunchShortcut)" SEC_QuickLaunchShortcut
    SectionIn 2
    WriteINIStr "$QUICKLAUNCH\${STR_AppName}.url" "InternetShortcut" "URL" "http://127.0.0.1/"
    SectionEnd
SectionGroupEnd
#=========================================================================================
#=========================================================================================
# 替換檔案內容用的巨集
!macro ReplaceConfig FileName StringOld StringNew
    Push `${StringOld}`     #text to be replaced
    Push `${StringNew}`     #replace with
    Push all                #replace all occurrences
    Push all                #replace all occurrences
    Push `${FileName}`      #file to replace in
    Call AdvReplaceInFile
!macroend
#=========================================================================================
#=========================================================================================
; 配置服務
Section "-SettingServer"
    ; 修改配置檔案
    !insertmacro ReplaceConfig "$INSTDIR\server\Apache2.2\conf\httpd.conf" "EGOA_BASE_PATH" "$INSTDIR"
    !insertmacro ReplaceConfig "$INSTDIR\server\MySQL4.1\my.ini" "EGOA_BASE_PATH" "$INSTDIR"
    !insertmacro ReplaceConfig "$INSTDIR\server\php5\php.ini" "EGOA_BASE_PATH" "$INSTDIR"
    ; 建立服務
    nsExec::ExecToLog '"$INSTDIR\server\MySQL4.1\bin\mysqld-nt.exe" --install MySQL4.1 --defaults-file="$INSTDIR\server\MySQL4.1\my.ini"'
    nsExec::ExecToLog '"$INSTDIR\server\Apache2.2\bin\httpd.exe" -k install'
    ; 啟動服務
    nsExec::ExecToLog 'net start MySQL4.1'
    nsExec::ExecToLog 'net start Apache2.2'
SectionEnd
#=========================================================================================
#=========================================================================================
; 完成安裝
Section "-PostInstall"
    ; 輸出解除安裝程式
    WriteUninstaller "$INSTDIR\Uninstall.exe"
    ; 寫登錄檔
    WriteRegStr HKCU "${REG_AppBase}" "InstallDir" "$INSTDIR"       ; 安裝的目錄
    WriteRegStr HKCU "${REG_AppBase}" "GroupName" "$STR_GroupName"  ; 軟體在開始選單中的名稱
    WriteRegStr HKCU "${REG_AppBase}" "Version" "${STR_Version}"    ; 版本號
    WriteRegStr HKCU "${REG_Uninstall}" "DisplayName" "$(^Name)"
    WriteRegStr HKCU "${REG_Uninstall}" "UninstallString" "$INSTDIR\Uninstall.exe"
    WriteRegStr HKCU "${REG_Uninstall}" "DisplayIcon" "$INSTDIR\EgOA.ico"
    WriteRegStr HKCU "${REG_Uninstall}" "DisplayVersion" "${STR_Version}"
    WriteRegStr HKCU "${REG_Uninstall}" "URLInfoAbout" "${STR_HomepageUrl}"
    WriteRegStr HKCU "${REG_Uninstall}" "Publisher" "${STR_Publisher}"
SectionEnd
#=========================================================================================
#=========================================================================================
; 初始化回撥函式
Function .onInit
    !insertmacro MUI_LANGDLL_DISPLAY
    ; 判斷是否已安裝
    Var /GLOBAL OLD_REG_Version
    ReadRegStr $OLD_REG_Version "HKCU" "${REG_APPBASE}" "Version"
    ${If} $OLD_REG_Version <> ''
    Abort '系統中已安裝有本程式,請先解除安裝後再安裝!'
    ${EndIf}
FunctionEnd
#=========================================================================================
#=========================================================================================
# 替換檔案中的字串
Function AdvReplaceInFile
    Exch $0  ;file to replace in
    Exch
    Exch $1  ;number to replace after
    Exch
    Exch 2
    Exch $2  ;replace and onwards
    Exch 2
    Exch 3
    Exch $3  ;replace with
    Exch 3
    Exch 4
    Exch $4  ;to replace
    Exch 4
    Push $5  ;minus count
    Push $6  ;universal
    Push $7  ;end string
    Push $8  ;left string
    Push $9  ;right string
    Push $R0 ;file1
    Push $R1 ;file2
    Push $R2 ;read
    Push $R3 ;universal
    Push $R4 ;count (onwards)
    Push $R5 ;count (after)
    Push $R6 ;temp file name
    GetTempFileName $R6
    FileOpen $R1 $0 r   ;file to search in
    FileOpen $R0 $R6 w  ;temp file
    StrLen $R3 $4
    StrCpy $R4 -1
    StrCpy $R5 -1
    loop_read:
    ClearErrors
    FileRead $R1 $R2 ;read line
    IfErrors exit
    StrCpy $5 0
    StrCpy $7 $R2
    loop_filter:
    IntOp $5 $5 - 1
    StrCpy $6 $7 $R3 $5 ;search
    StrCmp $6 "" file_write2
    StrCmp $6 $4 0 loop_filter
    StrCpy $8 $7 $5     ;left part
    IntOp $6 $5 + $R3
    IntCmp $6 0 is0 not0
    is0:
    StrCpy $9 ""
    Goto done
    not0:
    StrCpy $9 $7 "" $6  ;right part
    done:
    StrCpy $7 $8$3$9    ;re-join
    IntOp $R4 $R4 + 1
    StrCmp $2 all file_write1
    StrCmp $R4 $2 0 file_write2
    IntOp $R4 $R4 - 1
    IntOp $R5 $R5 + 1
    StrCmp $1 all file_write1
    StrCmp $R5 $1 0 file_write1
    IntOp $R5 $R5 - 1
    Goto file_write2
    file_write1:
    FileWrite $R0 $7  ;write modified line
    Goto loop_read
    file_write2:
    FileWrite $R0 $R2 ;write unmodified line
    Goto loop_read
    exit:
    FileClose $R0
    FileClose $R1
    SetDetailsPrint none
    Delete $0
    Rename $R6 $0
    Delete $R6
    SetDetailsPrint both
    Pop $R6
    Pop $R5
    Pop $R4
    Pop $R3
    Pop $R2
    Pop $R1
    Pop $R0
    Pop $9
    Pop $8
    Pop $7
    Pop $6
    Pop $5
    Pop $0
    Pop $1
    Pop $2
    Pop $3
    Pop $4
FunctionEnd
#=========================================================================================
#=========================================================================================
# 根據安裝日誌解除安裝檔案的呼叫巨集
!macro DelFileByLog LogFile
  ifFileExists `${LogFile}` 0 +4
    Push `${LogFile}`
    Call un.DelFileByLog
    Delete `${LogFile}`
!macroend
#=========================================================================================
#=========================================================================================
; 解除安裝
Section "Uninstall"
    ; 停止服務
    nsExec::ExecToLog 'net stop Apache2.2'
    nsExec::ExecToLog 'net stop MySQL4.1'
    ; 解除安裝服務
    nsExec::ExecToLog '"$INSTDIR\server\MySQL4.1\bin\mysqld-nt.exe" --remove MySQL4.1'
    nsExec::ExecToLog '"$INSTDIR\server\Apache2.2\bin\httpd.exe" -k uninstall'
    ; 從登錄檔中取得軟體在開始選單中的名稱
    ReadRegStr $TMP_GroupName HKCU "${REG_AppBase}" "GroupName"
    ; 刪除開始選單中的快捷方式與目錄
    Delete "$SMPROGRAMS\$TMP_GroupName\${STR_AppName}.url"
    Delete "$SMPROGRAMS\$TMP_GroupName\${STR_AppName} $(LNG_Help).url"
    Delete "$SMPROGRAMS\$TMP_GroupName\${STR_AppName} $(LNG_Homepage).url"
    Delete "$SMPROGRAMS\$TMP_GroupName\$(LNG_Uninstall) ${STR_AppName}.lnk"
    RMDir  "$SMPROGRAMS\$TMP_GroupName"
    Delete /REBOOTOK "$DESKTOP\${STR_AppName}.url"          ; 刪除桌面快捷方式
    Delete /REBOOTOK "$QUICKLAUNCH\${STR_AppName}.url"      ; 刪除快速啟動快捷方式
    ; 呼叫巨集根據安裝日誌解除安裝安裝程式自己安裝過的檔案
    !insertmacro DelFileByLog "$INSTDIR\install.log"
    ; 刪除安裝目錄中的檔案
    RMDir  "$INSTDIR"
    RMDir  "$INSTDIR\help"
    RMDir  "$INSTDIR\program"
    RMDir  /r /REBOOTOK "$INSTDIR\server"
    RMDir  /r /REBOOTOK "$INSTDIR\help"
    ; 刪除登錄檔內容
    DeleteRegKey HKCU "${REG_Uninstall}"
    DeleteRegKey HKCU "${REG_AppBase}"
    SetAutoClose True
SectionEnd
#=========================================================================================
#=========================================================================================
; 解除安裝初始化
Function un.onInit
    !insertmacro MUI_UNGETLANGUAGE
FunctionEnd
#=========================================================================================
#=========================================================================================
# 解除安裝程式通過安裝日誌解除安裝檔案函式
Function un.DelFileByLog
    Exch $R0
    Push $R1
    Push $R2
    Push $R3
    FileOpen $R0 $R0 r
    ${Do}
    FileRead $R0 $R1
    ${IfThen} $R1 == `` ${|} ${ExitDo} ${|}
    StrCpy $R1 $R1 -2
    StrCpy $R2 $R1 11
    StrCpy $R3 $R1 20
    ${If} $R2 == "File: wrote"
    ${OrIf} $R2 == "File: skipp"
    ${OrIf} $R3 == "CreateShortCut: out:"
    ${OrIf} $R3 == "created uninstaller:"
        Push $R1
        Push `"`
        Call un.DelFileByLog.StrLoc
        Pop $R2
        ${If} $R2 != ""
        IntOp $R2 $R2 + 1
        StrCpy $R3 $R1 "" $R2
        Push $R3
        Push `"`
        Call un.DelFileByLog.StrLoc
        Pop $R2
        ${If} $R2 != ""
            StrCpy $R3 $R3 $R2
            Delete /REBOOTOK $R3
        ${EndIf}
        ${EndIf}
    ${EndIf}
    StrCpy $R2 $R1 7
    ${If} $R2 == "Rename:"
        Push $R1
        Push "->"
        Call un.DelFileByLog.StrLoc
        Pop $R2
        ${If} $R2 != ""
        IntOp $R2 $R2 + 2
        StrCpy $R3 $R1 "" $R2
        Delete /REBOOTOK $R3
        ${EndIf}
    ${EndIf}
    ${Loop}
    FileClose $R0
    Pop $R3
    Pop $R2
    Pop $R1
    Pop $R0
FunctionEnd
Function un.DelFileByLog.StrLoc
    Exch $R0
    Exch
    Exch $R1
    Push $R2
    Push $R3
    Push $R4
    Push $R5
    StrLen $R2 $R0
    StrLen $R3 $R1
    StrCpy $R4 0
    ${Do}
    StrCpy $R5 $R1 $R2 $R4
    ${If} $R5 == $R0
    ${OrIf} $R4 = $R3
        ${ExitDo}
    ${EndIf}
    IntOp $R4 $R4 + 1
    ${Loop}
    ${If} $R4 = $R3
    StrCpy $R0 ""
    ${Else}
    StrCpy $R0 $R4
    ${EndIf}
    Pop $R5
    Pop $R4
    Pop $R3
    Pop $R2
    Pop $R1
    Exch $R0
FunctionEnd
#=========================================================================================
#=========================================================================================
# 節描述
!insertmacro MUI_FUNCTION_DESCRIPTION_BEGIN
    !insertmacro MUI_DESCRIPTION_TEXT ${SEC_ProgramFile} "$(LNG_ProgramFileDesc)"
    !insertmacro MUI_DESCRIPTION_TEXT ${SEC_EgOA} "$(LNG_EgOADesc)"
    !insertmacro MUI_DESCRIPTION_TEXT ${SEC_ServerEnv} "$(LNG_ServerEnvDesc)"
    !insertmacro MUI_DESCRIPTION_TEXT ${SEC_Shortcut} "$(LNG_CreateShortcutDesc)"
    !insertmacro MUI_DESCRIPTION_TEXT ${SEC_DesktopShortcut} "$(LNG_CreateShortcutDesc)"
    !insertmacro MUI_DESCRIPTION_TEXT ${SEC_QuickLaunchShortcut} "$(LNG_CreateShortcutDesc)"
    !insertmacro MUI_DESCRIPTION_TEXT ${SEC_AppNameShortcut} "$(LNG_CreateShortcutDesc)"
    !insertmacro MUI_DESCRIPTION_TEXT ${SEC_HelpShortcut} "$(LNG_CreateShortcutDesc)"
    !insertmacro MUI_DESCRIPTION_TEXT ${SEC_HomePageShortcut} "$(LNG_CreateShortcutDesc)"
    !insertmacro MUI_DESCRIPTION_TEXT ${SEC_UninstallShortcut} "$(LNG_CreateShortcutDesc)"
!insertmacro MUI_FUNCTION_DESCRIPTION_END

相關推薦

NSIS 簡易教程

 ; 標頭檔案 !include "MUI.nsh" !include "Sections.nsh" !include "LogicLib.nsh" #===========================================================

Ocelot簡易教程之快速開始1

原文: Ocelot簡易教程(二)之快速開始1 Ocelot簡易教程目錄 Ocelot簡易教程(一)之Ocelot是什麼 Ocelot簡易教程(二)之快速開始1 Ocelot簡易教程(二)之快速開始2 Ocelot簡易教程(三)之主要特性及路由詳解 Ocelot簡易教程(四)之請求聚

NSIS 簡易教程

 ;回撥函式有特定的名字,在特定的時間呼叫   ;目前可用的callback functions:   1.    .onGUIInit   ;this callback will be called just before the first page is l

LoadRunner12.x簡易入門教程--Action迭代

上一節我們講到用LoadRunner12錄製一個最簡單的指令碼,這節來說一說如何將Action進行迭代回放 通常,我們錄製的時候,會將登入的部分錄在vuser_init裡面,而將登出部分錄在vuser_end裡面。 因為這兩部分的程式碼是不受我們設定的迭代次數影響的,而往

Django搭建簡易部落格教程

十一、View和URL 網頁程式的邏輯:request進來 -> 從伺服器獲取資料 -> 處理資料 -> 把網頁呈現出來 url 設定相當於客戶端向伺服器發出request請求的入口,並用來指明要呼叫的程式邏輯 views 用來處理程式邏輯,然後呈現到

iptables實用教程:管理鏈和策略

否則 命令顯示 accept 目的 number cep 存在 當前 末尾 概念和原理請參考上一篇文章“iptables實用教程(一)”。 本文講解如果管理iptables中的鏈和策略。 下面的代碼格式中,下劃線表示是一個占位符,需要根據實際情況輸入參數,不帶下劃線的表示是

Qt 3D教程初步顯示3D的內容

初始 應用 frame 通過 net settings mod rgba bsp Qt3D教程(二)初步顯示3D的內容 前一篇很easy,全然就沒有牽涉到3D的內容,它僅僅是我們搭建3D應用的基本框架而已,而這一篇。我們將要利用它來初步地顯示3D

Python入門系列教程

字符 小寫 無符號 bsp div width raw_input abc body 字符串 1.字符串輸出 name = ‘xiaoming‘ print("姓名:%s"%name) 2.字符串輸入 userName = raw_input(‘請輸

Nginx實用教程:配置文件入門

affinity type 服務 源碼編譯 設置時間 shutdown ber 可用 控制指令 Nginx配置文件結構 nginx配置文件由指令(directive)組成,指令分為兩種形式,簡單指令和區塊指令。 一條簡單指令由指令名、參數和結尾的分號(;)組成,例如:

CodeArt入門教程

本質 文件夾 不同的 存在 切換數據庫 站點 ear 新的 組裝 4.第一個示例的編碼工作   使用CA編碼項目的核心結構是:由多個子系統組成多個不同的服務來提供項目的各種功能。請不要將這裏提到的子系統與大家在別的項目實施方法裏的概念混為一談,CA裏的子系統概念是完全不一樣

Yii2框架RESTful API教程 - 格式化響應,授權認證和速率限制

formatter loginurl 而不是 filters ica cat 表示 程序 ssi 之前寫過一篇Yii2框架RESTful API教程(一) - 快速入門,今天接著來探究一下Yii2 RESTful的格式化響應,授權認證和速率限制三個部分 一、目錄結構 先

Dapper入門教程——執行非查詢語句

文本 resp -exec factor -h spa onf fec table 描述 你可以從任意實現IDbConnection的類對象中調用Dapper的擴展方法“Execute”。它能夠執行一條命令(Command)一次或者多次,並返回受影響的行數。這個方法通常用來

微信公眾平臺開發教程 基本原理及消息接口

username 普通用戶 縮放 地理位置 cfb 位置 註意 獲得 基本 一、基本原理 在開始做之前,大家可能對這個很感興趣,但是又比較茫然。是不是很復雜?很難學啊? 其實恰恰相反,很簡單。為了打消大家的顧慮,先簡單介紹了微信公眾平臺的基本原理。 微信服務器就相當於一個轉

Git 教程:時光穿梭

rac call 替換 img posit key 誤刪 ranch 定位在 我們已經成功地添加並提交了一個readme.txt文件,現在,是時候繼續工作了,於是,我們繼續修改readme.txt文件,改成如下內容: Git is a distributed version

Zabbix實戰-簡易教程7--監控第一臺host

頁簽 1.2 wget mage .sh 根據 支持 紅色 hosts 一、安裝 agent 1.1 Agent分布 1.2 Agent安裝 基礎模板安裝方法: wget -qO- http://zbxinstall.188.com:10086/base/agent-

Zabbix實戰-簡易教程6--Server端高可用

then lock file timeout conf 腳本 secret oot rac div 3.4 server前端高可用 至此,單臺Zabbix server環境已經搭建完成,為了達到高可用效果,我們需要通過2臺服務器之間通過HA軟件進行探測,一旦檢測到主的

JXLS 2.4.0系列教程——循環導出一個鏈表的數據

教程 super 最簡 com arraylist port 至少 ron mod 請務必先看上一篇文章,本文在上一篇文章的代碼基礎上修改而成。 JXLS 2.4.0系列教程(一)——最簡單的模板導出 上一篇文章我們介紹了JXLS和模板導出最簡單的應用,現在我們要更進一

Spring Boot參考教程SpringBoot特性

provide 初始化 spa using 一個 ora https ann war 2. Spring Boot特性 1. Starter pom(起步依賴) Spring提供了一系列的starterpom來簡化Maven的依賴加載,具體可參考官方文檔13.5 Star

ThinkJS框架入門詳細教程新手入門項目

logs connect 項目 目錄 itl 合並 sql文件 生產 js框架 一、準備工作 參考前一篇:ThinkJS框架入門詳細教程(一)開發環境 安裝thinkJS命令 npm install -g think-cli 監測是否安裝成功 thin

Solr集群搭建詳細教程

內容 必須 不同的 nbsp 統一 工作 虛擬 應該 opts 註:歡迎大家轉載,非商業用途請在醒目位置註明本文鏈接和作者名dijia478,商業用途請聯系本人[email protected]。 之前步驟:Solr集群搭建詳細教程(一) 三、solr集群搭建 註意,在