wordpress 入侵視頻優(yōu)化營(yíng)商環(huán)境條例全文
引言
NSIS (Nullsoft Scriptable Install System) 是一個(gè)專業(yè)開源的制作 windows 安裝程序的工具。我們通過(guò)HM NSIEDIT編寫好腳本、編譯即可生成exe安裝包。安裝過(guò)程中可以配置其安裝包圖標(biāo)、名稱、出版人、網(wǎng)站等。此外,還可以設(shè)置程序開機(jī)自啟動(dòng)、管理員權(quán)限運(yùn)行等給基于注冊(cè)表的操作,也可以運(yùn)行批處理文件(bat文件)進(jìn)行系統(tǒng)模塊的安裝。
1、所需工具
1:NSIS 下載地址:?NSIS: Nullsoft Scriptable Install System download | SourceForge.net
2:HM NIS Edit 腳本編輯工具:HM NIS Edit: A Free NSIS Editor/IDE (sourceforge.net)
2、示例
關(guān)于NSIS網(wǎng)上有很多教程,不在此贅述。我將主要記錄在使用過(guò)程中出現(xiàn)的問(wèn)題和一些常用的語(yǔ)法等。
2.1、設(shè)置安裝完運(yùn)行、開機(jī)自啟動(dòng)
在!insertmacro MUI_PAGE_FINISH 上方插入代碼:
//是否安裝完運(yùn)行勾選框
!define MUI_FINISHPAGE_RUN "$INSTDIR\net48\MetalBurrDetectionSys.exe"
//開機(jī)自啟動(dòng)勾選框
!define MUI_FINISHPAGE_SHOWREADME
!define MUI_FINISHPAGE_SHOWREADME_Function AutoBoot
!define MUI_FINISHPAGE_SHOWREADME_TEXT "開機(jī)自啟動(dòng)"
Function AutoBootWriteRegStr HKCU "Software\Microsoft\Windows\CurrentVersion\Run" "MetalBurrKey" '"$INSTDIR\net48\MetalBurrDetectionSys.exe"'
FunctionEnd
?記得在卸載時(shí)刪除鍵值
Function un.onUninstSuccessHideWindowDeleteRegValue HKCU "Software\Microsoft\Windows\CurrentVersion\Run" "MetalBurrKey"MessageBox MB_ICONINFORMATION|MB_OK "$(^Name) 已成功地從你的計(jì)算機(jī)移除。"
FunctionEnd
2.2、打包文件匹配
利用腳本向?qū)?huì)幫助我們快速構(gòu)建打包程序,但是文件羅列的太過(guò)詳細(xì),有事我們只需要打包Debug文件夾中 dll 和 exe 文件即可,而且后續(xù)可能會(huì)增加或修改類庫(kù)和運(yùn)行程序的名稱,此時(shí)用文件名匹配更為合適。
SetOutPath "$INSTDIR"SetOverwrite ifnewerFile "software\bin\Debug\*.dll"File "software\bin\Debug\*.exe"
如果你想包含子目錄及其所有指定格式文件,如下
SetOutPath "$INSTDIR"SetOverwrite ifnewerFile -r "software\bin\Debug\*.dll"File -r "software\bin\Debug\*.exe"
?刪除文件也有類似的方法:
RMDir /r "$INSTDIR\net48"
RMDir /r "$INSTDIR"
2.3、注冊(cè)表操作、管理員啟動(dòng)
在Post階段,向?qū)?huì)為我們自動(dòng)生成程序相關(guān)鍵值,我們也可以根據(jù)需要插入額外鍵值?,如需要管理員啟動(dòng)
Section -PostWriteUninstaller "$INSTDIR\uninst.exe"WriteRegStr HKLM "${PRODUCT_DIR_REGKEY}" "" "$INSTDIR\net48\MetalBurrDetectionSys.exe"WriteRegStr ${PRODUCT_UNINST_ROOT_KEY} "${PRODUCT_UNINST_KEY}" "DisplayName" "$(^Name)"WriteRegStr ${PRODUCT_UNINST_ROOT_KEY} "${PRODUCT_UNINST_KEY}" "UninstallString" "$INSTDIR\uninst.exe"WriteRegStr ${PRODUCT_UNINST_ROOT_KEY} "${PRODUCT_UNINST_KEY}" "DisplayIcon" "$INSTDIR\net48\MetalBurrDetectionSys.exe"WriteRegStr ${PRODUCT_UNINST_ROOT_KEY} "${PRODUCT_UNINST_KEY}" "DisplayVersion" "${PRODUCT_VERSION}"WriteRegStr ${PRODUCT_UNINST_ROOT_KEY} "${PRODUCT_UNINST_KEY}" "Publisher" "${PRODUCT_PUBLISHER}";針對(duì)當(dāng)前用戶有效WriteRegStr HKCU "SOFTWARE\Microsoft\Windows NT\CurrentVersion\AppCompatFlags\Layers" "$INSTDIR\net48\MetalBurrDetectionSys.exe" "RUNASADMIN";針對(duì)所有用戶有效WriteRegStr HKEY_LOCAL_MACHINE "SOFTWARE\Microsoft\Windows NT\CurrentVersion\AppCompatFlags\Layers" "$INSTDIR\net48\MetalBurrDetectionSys.exe" "RUNASADMIN"
SectionEnd
管理員啟動(dòng)設(shè)計(jì)如下代碼:
;針對(duì)當(dāng)前用戶有效WriteRegStr HKCU "SOFTWARE\Microsoft\Windows NT\CurrentVersion\AppCompatFlags\Layers" "$INSTDIR\net48\MetalBurrDetectionSys.exe" "RUNASADMIN";針對(duì)所有用戶有效WriteRegStr HKEY_LOCAL_MACHINE "SOFTWARE\Microsoft\Windows NT\CurrentVersion\AppCompatFlags\Layers" "$INSTDIR\net48\MetalBurrDetectionSys.exe"
2.4、快捷鍵
我在使用生成快捷鍵時(shí),會(huì)出現(xiàn)點(diǎn)擊快捷鍵無(wú)效,或則在開始菜單里沒有生成對(duì)應(yīng)的目錄和快捷鍵,并且快捷鍵也無(wú)效的情況,當(dāng)我把程序的主運(yùn)行exe放在最后寫入時(shí)即可解決。
?生成桌面快捷鍵、開始菜單目錄及程序和卸載快捷鍵代碼如下:
Section -AdditionalIcons!insertmacro MUI_STARTMENU_WRITE_BEGIN ApplicationCreateDirectory "$SMPROGRAMS\$ICONS_GROUP"CreateShortCut "$SMPROGRAMS\$ICONS_GROUP\${PRODUCT_NAME} ${PRODUCT_VERSION}.lnk" "$INSTDIR\net48\MetalBurrDetectionSys.exe"CreateShortCut "$DESKTOP\${PRODUCT_NAME} ${PRODUCT_VERSION}.lnk" "$INSTDIR\net48\MetalBurrDetectionSys.exe"CreateShortCut "$SMPROGRAMS\$ICONS_GROUP\Uninstall.lnk" "$INSTDIR\uninst.exe"!insertmacro MUI_STARTMENU_WRITE_END
SectionEnd
2.5、執(zhí)行bat腳本
我主要用到兩種:等待并顯示終端、等待不顯示終端
;等待不顯示終端
nsExec::Exec '$INSTDIR/removeWeb.bat'
;等待并顯示終端
ExecWait '$INSTDIR/removeWeb.bat'
2.6、完整示例
; Script generated by the HM NIS Edit Script Wizard.; HM NIS Edit Wizard helper defines
!define PRODUCT_NAME "某某軟件"
!define PRODUCT_VERSION "1.0"
!define PRODUCT_PUBLISHER "某某公司"
!define PRODUCT_DIR_REGKEY "Software\Microsoft\Windows\CurrentVersion\App Paths\MetalBurrDetectionSys.exe"
!define PRODUCT_UNINST_KEY "Software\Microsoft\Windows\CurrentVersion\Uninstall\${PRODUCT_NAME}"
!define PRODUCT_UNINST_ROOT_KEY "HKLM"
!define PRODUCT_STARTMENU_REGVAL "NSIS:StartMenuDir"; MUI 1.67 compatible ------
!include "MUI.nsh"; MUI Settings
!define MUI_ABORTWARNING
!define MUI_ICON "某某軟件\Resources\maociLOGO.ico"
!define MUI_UNICON "${NSISDIR}\Contrib\Graphics\Icons\modern-uninstall.ico"; Welcome page
!insertmacro MUI_PAGE_WELCOME
; License page
!insertmacro MUI_PAGE_LICENSE "softwarelicense.rtf"
; Directory page
!insertmacro MUI_PAGE_DIRECTORY
; Start menu page
var ICONS_GROUP
!define MUI_STARTMENUPAGE_NODISABLE
!define MUI_STARTMENUPAGE_DEFAULTFOLDER "某某軟件"
!define MUI_STARTMENUPAGE_REGISTRY_ROOT "${PRODUCT_UNINST_ROOT_KEY}"
!define MUI_STARTMENUPAGE_REGISTRY_KEY "${PRODUCT_UNINST_KEY}"
!define MUI_STARTMENUPAGE_REGISTRY_VALUENAME "${PRODUCT_STARTMENU_REGVAL}"
!insertmacro MUI_PAGE_STARTMENU Application $ICONS_GROUP
; Instfiles page
!insertmacro MUI_PAGE_INSTFILES
; Finish page
!define MUI_FINISHPAGE_RUN "$INSTDIR\net48\MetalBurrDetectionSys.exe"
!define MUI_FINISHPAGE_SHOWREADME
!define MUI_FINISHPAGE_SHOWREADME_Function AutoBoot
!define MUI_FINISHPAGE_SHOWREADME_TEXT "開機(jī)自啟動(dòng)"
!insertmacro MUI_PAGE_FINISH; Uninstaller pages
!insertmacro MUI_UNPAGE_INSTFILES; Language files
!insertmacro MUI_LANGUAGE "SimpChinese"; MUI end ------Name "${PRODUCT_NAME} ${PRODUCT_VERSION}"
OutFile "${PRODUCT_NAME}安裝包 ${PRODUCT_VERSION}.exe"
InstallDir "D:\Program Files\某某軟件"
InstallDirRegKey HKLM "${PRODUCT_DIR_REGKEY}" ""
ShowInstDetails show
ShowUnInstDetails showRequestExecutionLevel admin;打包幫助文檔
Section "Helpbook" SEC01;執(zhí)行腳本nsExec::Exec '$INSTDIR/removeWeb.bat'SetOutPath "D:\HelpFile\某某軟件\dist"File /r "..\EditorRunHelpFile\BatteryHelpFile\docs\.vuepress\dist\*.*"nsExec::Exec '$INSTDIR/iis.bat'
SectionEnd;打包主程序文件
Section "MainSection" SEC02;停止進(jìn)程nsExec::Exec "taskkill /im MetalBurrDetectionSys.exe /f"SetOutPath "$INSTDIR\SystemConfig"SetOverwrite ifnewerFile /r "某某軟件\bin\Debug\SystemConfig\*.json"SetOutPath "$INSTDIR"SetOverwrite ifnewerFile "某某軟件\bin\Debug\*.*"SetOutPath "$INSTDIR\net48"SetOverwrite ifnewerFile /r "某某軟件\bin\Debug\net48\*.dll"File /r "某某軟件\bin\Debug\net48\*.json"File /r "某某軟件\bin\Debug\net48\*.config"File /r "某某軟件\bin\Debug\net48\*.WH"File /r "某某軟件\bin\Debug\net48\*.png"File "A:\目錄\*.dll"File /r "某某軟件\bin\Debug\net48\*.exe"SectionEndSection -PostWriteUninstaller "$INSTDIR\uninst.exe"WriteRegStr HKLM "${PRODUCT_DIR_REGKEY}" "" "$INSTDIR\net48\MetalBurrDetectionSys.exe"WriteRegStr ${PRODUCT_UNINST_ROOT_KEY} "${PRODUCT_UNINST_KEY}" "DisplayName" "$(^Name)"WriteRegStr ${PRODUCT_UNINST_ROOT_KEY} "${PRODUCT_UNINST_KEY}" "UninstallString" "$INSTDIR\uninst.exe"WriteRegStr ${PRODUCT_UNINST_ROOT_KEY} "${PRODUCT_UNINST_KEY}" "DisplayIcon" "$INSTDIR\net48\MetalBurrDetectionSys.exe"WriteRegStr ${PRODUCT_UNINST_ROOT_KEY} "${PRODUCT_UNINST_KEY}" "DisplayVersion" "${PRODUCT_VERSION}"WriteRegStr ${PRODUCT_UNINST_ROOT_KEY} "${PRODUCT_UNINST_KEY}" "Publisher" "${PRODUCT_PUBLISHER}";管理員啟動(dòng);針對(duì)當(dāng)前用戶有效WriteRegStr HKCU "SOFTWARE\Microsoft\Windows NT\CurrentVersion\AppCompatFlags\Layers" "$INSTDIR\net48\MetalBurrDetectionSys.exe" "RUNASADMIN";針對(duì)所有用戶有效WriteRegStr HKEY_LOCAL_MACHINE "SOFTWARE\Microsoft\Windows NT\CurrentVersion\AppCompatFlags\Layers" "$INSTDIR\net48\MetalBurrDetectionSys.exe" "RUNASADMIN"
SectionEnd;快捷鍵
Section -AdditionalIcons!insertmacro MUI_STARTMENU_WRITE_BEGIN ApplicationCreateDirectory "$SMPROGRAMS\$ICONS_GROUP"CreateShortCut "$SMPROGRAMS\$ICONS_GROUP\${PRODUCT_NAME} ${PRODUCT_VERSION}.lnk" "$INSTDIR\net48\MetalBurrDetectionSys.exe"CreateShortCut "$DESKTOP\${PRODUCT_NAME} ${PRODUCT_VERSION}.lnk" "$INSTDIR\net48\MetalBurrDetectionSys.exe"CreateShortCut "$SMPROGRAMS\$ICONS_GROUP\Uninstall.lnk" "$INSTDIR\uninst.exe"!insertmacro MUI_STARTMENU_WRITE_END
SectionEndSection Uninstall!insertmacro MUI_STARTMENU_GETFOLDER "Application" $ICONS_GROUP;執(zhí)行腳本 等待不顯示終端nsExec::Exec '$INSTDIR/removeWeb.bat'Delete "$INSTDIR\uninst.exe"Delete "$SMPROGRAMS\$ICONS_GROUP\Uninstall.lnk"Delete "$DESKTOP\${PRODUCT_NAME} ${PRODUCT_VERSION}.lnk"Delete "$SMPROGRAMS\$ICONS_GROUP\${PRODUCT_NAME} ${PRODUCT_VERSION}.lnk"RMDir "$SMPROGRAMS\$ICONS_GROUP"RMDir /r "D:\HelpFile\某某軟件\dist"RMDir /r "$INSTDIR\SystemConfig"RMDir /r "$INSTDIR\net48"RMDir /r "$INSTDIR"DeleteRegKey ${PRODUCT_UNINST_ROOT_KEY} "${PRODUCT_UNINST_KEY}"DeleteRegKey HKLM "${PRODUCT_DIR_REGKEY}"DeleteRegValue HKCU "Software\Microsoft\Windows\CurrentVersion\Run" "MetalBurrKey"SetAutoClose true
SectionEnd;函數(shù)放在最后
Function AutoBootWriteRegStr HKCU "Software\Microsoft\Windows\CurrentVersion\Run" "MetalBurrKey" '"$INSTDIR\net48\MetalBurrDetectionSys.exe"'
FunctionEndFunction un.onUninstSuccessHideWindowDeleteRegValue HKCU "Software\Microsoft\Windows\CurrentVersion\Run" "MetalBurrKey"MessageBox MB_ICONINFORMATION|MB_OK "$(^Name) 已成功地從你的計(jì)算機(jī)移除。"
FunctionEndFunction un.onInitMessageBox MB_ICONQUESTION|MB_YESNO|MB_DEFBUTTON2 "你確實(shí)要完全移除 $(^Name) ,其及所有的組件?" IDYES +2Abort
FunctionEnd
3、腳本
自動(dòng)安裝IIS服務(wù)
@echo off
cd /d "%~dp0"echo Installing IIS...
echo Wait a moment...
start /w pkgmgr /iu:IIS-WebServerRole;WAS-WindowsActivationService;WAS-ProcessModel;WAS-NetFxEnvironment;WAS-ConfigurationAPIecho Done.
刪除網(wǎng)站
@echo off
setlocal:: 設(shè)置網(wǎng)站名稱
set SITE_NAME=WH_MetalBurr:: 使用appcmd.exe刪除網(wǎng)站
%windir%\system32\inetsrv\appcmd delete site %SITE_NAME%endlocal
echo Done.