关于NSIS脚本的Demo

这个NSIS脚本是打包公司的整个Release项目工程。

用NSIS编译器编译下就可以了。

 

; Script generated by the HM NIS Edit Script Wizard.!include "StrFunc.nsh"
; HM NIS Edit Wizard helper defines
!define PRODUCT_NAME "dlf_setup_v2.0"
!define PRODUCT_VERSION "2.0"
!define PRODUCT_PUBLISHER "DouBan Inc."
!define PRODUCT_WEB_SITE "http://wwwdouban.com"
!define PRODUCT_DIR_REGKEY "Software\Microsoft\Windows\CurrentVersion\App Paths\makensis.exe"
!define PRODUCT_UNINST_KEY "Software\Microsoft\Windows\CurrentVersion\Uninstall\${PRODUCT_NAME}"
!define PRODUCT_UNINST_ROOT_KEY "HKLM"
!define INSTALL_DIR_FILENAME "DouBan"; MUI 1.67 compatible ------
!include "MUI.nsh"
!include "LogicLib.nsh"
!include "x64.nsh"
!include "EnvVarUpdate.nsh"
!include "WinVer.nsh"; MUI Settings
!define MUI_ABORTWARNING
!define MUI_ICON "${NSISDIR}\Contrib\Graphics\Icons\Wintech.ico"
!define MUI_UNICON "${NSISDIR}\Contrib\Graphics\Icons\Wintech.ico"; Welcome page
!insertmacro MUI_PAGE_WELCOME
; License page
;!insertmacro MUI_PAGE_LICENSE "${NSISDIR}\License.txt"
; Directory page
!insertmacro MUI_PAGE_DIRECTORY
; Instfiles page
!insertmacro MUI_PAGE_INSTFILES
; Finish page
;!define MUI_FINISHPAGE_RUN "$INSTDIR\bin\wlp_exe_gui.exe"
;!define MUI_FINISHPAGE_SHOWREADME "$INSTDIR\readme.txt"
!insertmacro MUI_PAGE_FINISH; Uninstaller pages
!insertmacro MUI_UNPAGE_INSTFILES; Language files
!insertmacro MUI_LANGUAGE "English"!echo "Running${out_suffix}"; MUI end ------RequestExecutionLevel adminName "${PRODUCT_NAME} ${PRODUCT_VERSION}"
OutFile "dlf_setup_${out_suffix}.exe"
InstallDir "$PROGRAMFILES\${INSTALL_DIR_FILENAME}"
InstallDirRegKey HKLM "${PRODUCT_DIR_REGKEY}" ""
ShowInstDetails show
ShowUnInstDetails showSection "MainSection" SEC01${EnvVarUpdate} $0 "PATH" "A" "HKLM" "$INSTDIR\bin" ; appends to the system pathSetOutPath "$INSTDIR"SetOverwrite ifnewerFile "${NSISDIR}\makensis.exe"CreateDirectory "$INSTDIR";CreateShortCut "$SMPROGRAMS\${INSTALL_DIR_FILENAME}\${INSTALL_DIR_FILENAME}.lnk" "$INSTDIR\makensis.exe";CreateShortCut "$DESKTOP\${INSTALL_DIR_FILENAME}.lnk" "$INSTDIR\makensis.exe"CreateShortCut "$DESKTOP\WinTech.lnk" "$INSTDIR\bin\wlp_exe_gui.exe"File "${NSISDIR}\License.txt"File /r "setup\*"File /r "DLP4100 FPGA Program file\*"Var /GLOBAL WINDOWS_ARCHITECTURE;这里用了GetVersion插件,但是该插件的作者已经停止维护了,;但是不得已,需要使用,把GetVersion.dll放到了NSIS的插件目录下GetVersion::WindowsPlatformArchitecturePop $WINDOWS_ARCHITECTURE ; 32 or 64; MessageBox MB_OK "${Version}" ; ${GetWindowsVersion} $R0${If} ${IsWinXP} ${If}   "$WINDOWS_ARCHITECTURE" != "32"MessageBox MB_OK  "Sorry this application cannot run on this machine architecture!" Quit ;结束整个安装进程${EndIf}${If}   "${Version32}" != "X86"MessageBox MB_OK  "Sorry this application cannot run on this machine architecture!" Quit ;结束整个安装进程${EndIf}${EndIf}${If} ${IsWin7}${If} "X$WINDOWS_ARCHITECTURE" != "${Version64}"MessageBox MB_OK  "Sorry this application cannot run on this machine architecture!" Quit ;结束整个安装进程${EndIf}${EndIf}${If} ${IsWin7}Exec '"$INSTDIR\bin\driver\win7\dpinst.exe" /c /f /se /sw /path "$INSTDIR\bin\driver\win7"'ExecWait '"$INSTDIR\bin\vs2010sp1vcredist.exe" /q'${EndIf};${If} ${IsWinXP} ;Exec '"$INSTDIR\bin\driver\win7\Psexec.exe"  -i  -d  -s  "$INSTDIR\bin\driver\win7\install_wdf_driver.exe"' ;ExecWait '"$INSTDIR\bin\vs2010sp1vcredist.exe" /q';${EndIf}${If} ${IsWinXP} ExecWait '"$INSTDIR\bin\vs2010sp1vcredist.exe" /q'MessageBox MB_OK "You Must Install Driver manually! The Driver Installation Instruction is located in ReadMe.txt"${EndIf}ExecShell open "$INSTDIR\";Detect windows is 32bit or 64bit;${If} ${RunningX64}
; 64bit bits go here; Exec '"$INSTDIR\bin\driver\win7\Psexec.exe"  -i  -d  -s  "$INSTDIR\bin\driver\win7\install_wdf_driver.exe"' ;-i -d -s "$INSTDIR\bin\Driver\win7install_wdf_driver.exe"'; Exec "$INSTDIR\bin\driver\win7\install_wdf_driver.exe";ExecWait '"$INSTDIR\bin\vs2010sp1vcredist.exe" /q';${Else}
; 32bit bits go here;  Exec '"$INSTDIR\bin\driver\win7\Psexec.exe"  -i  -d  -s  "$INSTDIR\bin\driver\win7\install_wdf_driver.exe"' ; ExecWait '"$INSTDIR\bin\vs2010sp1vcredist.exe"   /q'
;${EndIf}SectionEndSection -AdditionalIconsWriteIniStr "$INSTDIR\${PRODUCT_NAME}.url" "InternetShortcut" "URL" "${PRODUCT_WEB_SITE}"CreateShortCut "$SMPROGRAMS\MyScript\Website.lnk" "$INSTDIR\${PRODUCT_NAME}.url"CreateShortCut "$SMPROGRAMS\MyScript\Uninstall.lnk" "$INSTDIR\uninst.exe"
SectionEndSection -PostWriteUninstaller "$INSTDIR\uninst.exe"WriteRegStr HKLM "${PRODUCT_DIR_REGKEY}" "" "$INSTDIR\makensis.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\makensis.exe"WriteRegStr ${PRODUCT_UNINST_ROOT_KEY} "${PRODUCT_UNINST_KEY}" "DisplayVersion" "${PRODUCT_VERSION}"WriteRegStr ${PRODUCT_UNINST_ROOT_KEY} "${PRODUCT_UNINST_KEY}" "URLInfoAbout" "${PRODUCT_WEB_SITE}"WriteRegStr ${PRODUCT_UNINST_ROOT_KEY} "${PRODUCT_UNINST_KEY}" "Publisher" "${PRODUCT_PUBLISHER}"
SectionEndFunction un.onUninstSuccessHideWindowMessageBox MB_ICONINFORMATION|MB_OK "$(^Name) 已成功地从你的计算机移除。"
FunctionEndFunction un.onInitMessageBox MB_ICONQUESTION|MB_YESNO|MB_DEFBUTTON2 "你确实要完全移除 $(^Name) ,其及所有的组件?" IDYES +2Abort
FunctionEndSection UninstallDelete "$INSTDIR\${PRODUCT_NAME}.url"Delete "$INSTDIR\uninst.exe"Delete "$INSTDIR\setup"Delete "$INSTDIR\License.txt"Delete "$INSTDIR\makensis.exe"Delete "$SMPROGRAMS\${INSTALL_DIR_FILENAME}\Uninstall.lnk"Delete "$SMPROGRAMS\${INSTALL_DIR_FILENAME}\Website.lnk"Delete "$DESKTOP\${INSTALL_DIR_FILENAME}.lnk"Delete "$SMPROGRAMS\${INSTALL_DIR_FILENAME}\${INSTALL_DIR_FILENAME}.lnk"RMDir "$SMPROGRAMS\${INSTALL_DIR_FILENAME}"RMDir "$INSTDIR"DeleteRegKey ${PRODUCT_UNINST_ROOT_KEY} "${PRODUCT_UNINST_KEY}"DeleteRegKey HKLM "${PRODUCT_DIR_REGKEY}"SetAutoClose true
SectionEnd

  一些常用的NSIS代码

 

  1 ;获取操作系统盘符
  2 ReadEnvStr $R0 SYSTEMDRIVE
  3 ;创建log文件夹
  4 CreateDirectory "$R0\log"
  5 ;递归删除log文件夹
  6 RMDir /r "$R0\log"
  7 
  8 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  9 
 10 ;弹出Windows关机框
 11 FindWindow $0 "shell_traywnd"
 12 SendMessage $0 273 506 0
 13 
 14 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
 15 
 16 ;请求Windows帮助
 17 FindWindow $0 "shell_traywnd"
 18 SendMessage $0 273 503 0
 19 
 20 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
 21 
 22 ;一句话刷新屏幕
 23 System::Call 'Shell32::SHChangeNotify(i 0x8000000, i 0, i 0, i 0)'
 24 
 25 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
 26 
 27 ;打开桌面属性
 28 ;...cpl,0,3'中的3可以改为
 29 ;-1 主题 0 壁纸 1 屏保 2 外观 3 设置
 30 Exec 'Rundll32.exe shell32.dll,Control_RunDLL Desk.cpl,0,3'  ;打开"设置"
 31 
 32 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
 33 
 34 ;获得安装程序所在目录
 35 System::Call 'kernel32::GetCurrentDirectory(i 1024,t .R1)'
 36 MessageBox MB_OK '安装程序所在目录:$R1'
 37 ;或者直接使用变量
 38 MessageBox MB_OK '文件名$EXEFILE,所在文件夹$EXEDIR,完整路径$EXEPATH。'
 39 
 40 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
 41 
 42 ;获得当前安装程序进程PID
 43 System::Call 'kernel32::GetCurrentProcessId()i .R0'
 44 MessageBox MB_OK '安装程序进程PID:$R0'
 45 
 46 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
 47 
 48 ;获得磁盘卷标
 49 StrCpy $R0 "C:\"
 50 System::Call 'kernel32::GetVolumeInformationA(t R0,t .R1,i 100,i .R3,i .R4,i .R5,t .R6,i 100)'
 51 MessageBox MB_OK '盘符:$R0$\n卷标:$R1$\n文件格式:$R6'
 52 
 53 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
 54 
 55 ;设置磁盘卷标
 56 StrCpy $R0 "C:\" ;盘符
 57 StrCpy $R1 "系统" ;卷标
 58 System::Call 'kernel32::SetVolumeLabelA(t R0,t R1)'
 59 
 60 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
 61 
 62 ;设置文件属性
 63 StrCpy $R0 "C:\1.EXE" ;文件
 64 StrCpy $R1 0x20         ;属性
 65 System::Call 'kernel32::SetFileAttributesA(t R0,i 0x100)'
 66 ;属性表
 67 ;0x20   FILE_ATTRIBUTE_ARCHIVE,存档
 68 ;0x2 FILE_ATTRIBUTE_HIDDEN,隐藏
 69 ;0x80 FILE_ATTRIBUTE_NORMAL,正常
 70 ;0x2000 FILE_ATTRIBUTE_NOT_CONTENT_INDEXED,不索引
 71 ;0x1000 FILE_ATTRIBUTE_OFFLINE,离线
 72 ;0x1    FILE_ATTRIBUTE_READONLY,只读
 73 ;0x4 FILE_ATTRIBUTE_SYSTEM,系统
 74 ;0x100  FILE_ATTRIBUTE_TEMPORARY,;临时属性(一般无效)
 75 
 76 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
 77 
 78 ;在WIN7任务栏中增加图标链接
 79 SetOutPath $WINDIR
 80 CreateShortcut "$DESKTOP\记事本.lnk" "$WINDIR\notepad.exe"
 81 ExecShell taskbarpin "$DESKTOP\记事本.lnk"
 82 
 83 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
 84 
 85 ;安装结束后调用HTTP下载插件下载文件并运行
 86 Function .onGUIEnd
 87 NSISdl::download "http://www.flighty.cn/服务器文件名.exe" "本地文件名.exe"
 88 Pop $R0 ;获取返回值
 89   StrCmp $R0 "success" +3
 90     MessageBox MB_OK "下载失败,原因: $R0"
 91     Quit
 92 exec ""本地文件名.exe"" 
 93 FunctionEnd
 94 
 95 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
 96 
 97 ;隐藏/显示文件扩展名实时生效,写入 0 (0x00000000) 显示或 1 (0x00000001) 来隐藏
 98 WriteRegDWORD HKCU "Software\Microsoft\Windows\CurrentVersion\Explorer\Advanced" "HideFileExt" 0x00000001
 99 SendMessage ${HWND_BROADCAST} ${WM_SETTINGCHANGE} 0 "STR:ShellState"
100 System::Call "shell32::SHChangeNotify(i0x08000000,i0,i0,i0)"
101 
102 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
103 
104 OutFile "ScreenRes.exe"
105 Name "获取当前屏幕分辨率"
106 Caption "获取当前屏幕分辨率"
107 XPStyle "on"
108 
109 Function ".onInit"
110 System::Call 'user32::GetSystemMetrics(i 0) i .r0'
111 System::Call 'user32::GetSystemMetrics(i 1) i .r1'
112 MessageBox MB_OK|MB_ICONINFORMATION "当前屏幕分辨率为: $\r$\n$0 X $1"
113 Quit
114 FunctionEnd
115 
116 Section "轻狂志"
117 ;您的其他代码
118 SectionEnd
119 
120 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
121 
122 OutFile flighty.exe
123 Section "将轻狂志设为首页"
124     WriteRegStr HKCU "Software\Microsoft\Internet Explorer\Main" "Start Page" http://www.flighty.cn
125 SectionEnd
126 
127 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
128 
129 ;调用 Windows API 来获取运行时间
130 System::Alloc 16
131 System::Call kernel32::GetLocalTime(isR0)
132 System::Call *$R0(&i2.R1,&i2.R2,&i2.R3,&i2.R4,&i2.R5,&i2.R6,&i2.R7,&i2.R8)
133 System::Free $R0
134 MessageBox MB_OK "$R1年$R2月$R4日,星期$R3,$R5:$R6:$R7.$R8"
135 
136 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
137 
138 ;使用MiscButtonText修改按钮文本
139 ;分别对应[上一步]、[下一步]、[取消]、[关闭],如果留空参数,则使用默认值
140 MiscButtonText "" "" "" "完成(&G)"
141 ;安装过程页面
142 !insertmacro MUI_PAGE_INSTFILES
143 
144 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
145 
146 
147 ;清除目录权限及设置目录权限
148 AccessControl::DisableFileInheritance "$INSTDIR" ;禁止继承
149 AccessControl::ClearOnFile "$INSTDIR" "(S-1-1-0)" "FullAccess" ;设置Everyone权限
150 
151 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
152 
153 Name "获得CPU和BIOS信息"
154 OutFile "flighty.exe"
155 
156 Section
157 SectionEnd
158 
159 Function .onInit
160   ReadRegStr $0 HKLM "HARDWARE\DESCRIPTION\System\CentralProcessor\0" "VendorIdentifier"
161   ReadRegStr $1 HKLM "HARDWARE\DESCRIPTION\System\CentralProcessor\0" "ProcessorNameString"
162   ReadRegStr $2 HKLM "HARDWARE\DESCRIPTION\System\CentralProcessor\0" "Identifier"
163   ReadRegStr $3 HKLM "HARDWARE\DESCRIPTION\System\CentralProcessor\0" "~MHz"
164 
165   ReadRegStr $4 HKLM "HARDWARE\DESCRIPTION\System\BIOS" "BaseBoardManufacturer"
166   ReadRegStr $5 HKLM "HARDWARE\DESCRIPTION\System\BIOS" "BIOSVersion"
167   ReadRegStr $6 HKLM "HARDWARE\DESCRIPTION\System\BIOS" "BIOSReleaseDate"
168   MessageBox MB_OK|MB_ICONEXCLAMATION "CPU制造商$0  $\r$\nCPU型号$1  $\r$\nCPU标识$2  $\r$\nCPU主频$3  $\r$\n$\r$\n主板品牌$4  $\r$\n主板BIOS版本$5  $\r$\n主板BIOS日期$6"
169     Abort
170 FunctionEnd
171 
172 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
173 
174 Name "判断操作系统位宽"
175 OutFile "判断操作系统位宽.exe"
176 !include "x64.nsh"
177 
178 Section
179 SectionEnd
180 
181 Function .onInit
182 ${If} ${RunningX64}
183   MessageBox MB_OK "64"
184 ${Else}
185   MessageBox MB_OK "32"
186 ${EndIf}
187 FunctionEnd
188 
189 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
190 
191 ;在 hosts 文件中追加地址屏蔽脚本
192 ClearErrors
193 SetFileAttributes "$SYSDIR\drivers\etc\hosts" NORMAL ;去只读属性
194 FileOpen $9 $SYSDIR\drivers\etc\hosts a ;追加数据
195 ;FileSeek $9 0 END ;指针定位到相对于文件结尾
196 FileWrite $9 "127.0.0.1 adcount.sandai.net $\r$\n"
197 FileWrite $9 "127.0.0.1 biz4.sandai.net $\r$\n"
198 ;下面自己加
199 SetFileAttributes "$SYSDIR\drivers\etc\hosts" READONLY ;加只读属性
200 FileClose $9 ;关闭打开的文件
201 
202 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
203 
204 
205 ;对比两个文件的时间,如两个时间相等,就返回0;如R0小于R1,返回-1;如R1小于R0,返回1
206 StrCpy $R0 "C:\boot.ini"
207 StrCpy $R1 "C:\AUTOEXEC.BAT"
208 System::Call 'kernel32::CompareFileTime(t R0,t R1) i.R2'
209 MessageBox MB_OK '文件$R0与$R1时间比较结果$R2'
210 
211 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
212 
213 ;注册apache服务器, -n MyWebServer表示apache2注册服务名为MyWebServer,默认服务名为Apache2
214 nsExec::ExecToLog 'cmd.exe /c "$INSTDIR/apache2/bin/httpd.exe" -k install -n MyWebServer' 
215 
216 ;注册MySQL服务器, MyDBServer表示MySQL注册服务名为MyDBServer,默认服务名为MySQL
217 nsExec::ExecToLog 'cmd.exe /c "$INSTDIR/mysql5/bin/mysqld-nt.exe" -install MyDBServer'
218 
219 ;启动apache服务和MySQL服务
220 nsExec::ExecToLog 'cmd.exe /c "$INSTDIR/apache2/bin/httpd.exe" -k start -n MyWebServer'
221 ;或者   
222 nsExec::ExecToLog 'cmd.exe /c net start MyWebServer'
223 nsExec::ExecToLog 'cmd.exe /c net start MyDBServer'
224 
225 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
226 
227 ;从注册表中读取操作系统语言
228 ReadRegStr $0 HKLM "SYSTEM\CurrentControlSet\Control\Nls\Language" "Default"
229 ${If} $0 = 0804
230     MessageBox MB_OK "您的操作系统语言为简体中文。"
231 ${ElseIf} $0 == 0404
232     MessageBox MB_OK "您的操作系统语言为繁体中文。"
233 ${ElseIf} $0 == 0409
234     MessageBox MB_OK "您的操作系统语言为英文。"
235 ${EndIf}

reference: 

http://www.flighty.cn/plus/view.php?aid=156

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/546682.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Linux Shell编程之脚本执行方式

1.新建bash脚本文件 打开命令终端 touch hello.sh vim hello.sh2.编辑bash文件 #!/bin/bash # this is a test programerecho "hello word"3.脚本执行 赋予执行权限,直接运行 chmod 755 hello.sh ./hello.sh输出结果:

经典面试题|讲一讲JVM的组成

JVM(Java 虚拟机)算是面试必问的问题的了,而但凡问 JVM 一定会问的第一个问题就是:讲一讲 JVM 的组成?那本文就注重讲一下 JVM 的组成。 首先来说 JVM 的组成分为,整体组成部分和运行时数据区组成部分&…

ST-GCN训练自建数据集

参考了许多博文,慢慢地也就把st-gcn跑出来了,参考的文章一会附在文章里面,实测有用。 1.安装st-gcn 复现STGCN CPU版 (ubuntu16.04pytorch0.4.0openposecaffe)_Significance的博客-程序员秘密​​​​​​复现旧版STG…

[翻译] Haneke(处理图片缓存问题)

Haneke https://github.com/hpique/Haneke A lightweight zero-config image cache for iOS. 轻量级0配置图片缓存。 Haneke resizes images and caches the result on memory and disk. Everything is done in background, allowing for fast, responsive scrolling. Asking H…

Linux Shell编程之别名和常用快捷键

1.给命令起得别名,就是小名 例:给vim命令起个别名vi alias vivim2.取消别名 unalias vi常用快捷键: ctrl C 强制终止当前命令 ctrl L 清屏 ctrl U 删除或剪切光标之前内容的命令 ctrl K 删除或剪切光标之后内容的命令 ctrl Y 粘贴ctr…

面试题:为什么Java中的字符串对象是不可变的

阅读本文大概需要 4分钟。所谓不可变对象,是指一个对象在创建后,它的内部状态不会被改变的对象。这意味着当我们将一个不可变对象的引用赋值给某个变量后,我们就不能改变该对象的内部状态。 James Gosling也说过——Java开发者应该尽量使用不…

复现STGCN CPU版 (ubuntu16.04+pytorch0.4.0+openpose+caffe)

前提:ubuntu下将python3.5.2设为默认(百度) 一.下载stgcn (gitbub上fork后导入到gitee快些): st-gcn: Spatial Temporal Graph Convolutional Networks (ST-GCN) for Skeleton-Based Action Recognition in PyTorch…

arm-hisiv100nptl-linux-gcc编译boa和移植

工作需要,移植web服务器到摄像头中,查找资料,借鉴了几位前辈的文章自己弄了一下,还挺顺利的呦~系统:centos 6.4 64bit工具:arm-hisiv100nptl-linux-gcc1、交叉编译1)从www.boa.org下载Boa源码&a…

Linux Shell编程之输入输出重定向

一、.输出重定向: 1.以覆盖方式把正确输入和错误输入都保存在同一个文件中 命令 &> 文件 2.以追加方式把正确输入和错误输入都保存在同一个文件中 命令 &>> 文件 3.以追加方式把正确输入保存在文件1中,把错误输入保存在文件2中 命令 …

不止JDK7的HashMap,JDK8的ConcurrentHashMap也会造成CPU 100%

大家可能都听过JDK7中的HashMap在多线程环境下可能造成CPU 100%的现象,这个由于在扩容的时候put时产生了死链,由此会在get时造成了CPU 100%。这个问题在JDK8中的HashMap获得了解决。其实JDK7中的HashMap在多线程环境下不止只有CPU 100%这一共怪异现象&am…

关于发布DIPS的MVC项目的IIS 7.0环境配置的方法

本人技术笨拙,今天在发布DIPS的MVC4.0项目,并部署到IIS上,遇到各种问题。在查询相关资料后,最终得以解决,所以想把这个过程记录下来。 注:DIPS为一种非关系型数据库 首先,需要安装和注册DIPS。注…

Veket PuppyLinux系统装在U盘中

在碎片化或移动式办公的需求前,怎样才能做到只借助别人的硬件,而使用的是自己的操作系统以及保存数据呢?此时你可能会想到将某个Linux的桌面版本推送并存放在U盘中,便于按需进行启动与使用。 Veket是基于Puppy的一个Linux简体中文…

Java调优:Mybaitis的缓存优化

作者:肥朝,来自肥朝(ID:feichao_java)我们先来看代码这段代码中, Mybatis一共发了两条SQL,这就好像说, Mybatis中没有缓存,然后我们打开Mybatis的文档一看,顿时震惊这难道是骗人的,说好的默认开启缓存呢…..其实不是的…

扩充swap空间的两种方法

扩充swap空间的两种方法:方法一:分区的形式#fdisk /dev/sdb ---> t ---> 82--->w#mkswap /dev/sdb1 (格式化swap分区) mkswap-c检查是否有坏损块check#swapon /dev/sdb1 (启用swap分区) -L指定swap的卷标名称…

Shell编程之多命令顺序执行和管道符

1.多命令顺序执行: 打开!命令终端: 2.管道符 打开命令终端:

PowerShell3.0入门视频(由Jeffrey Snover和Jason Helmick主讲)

视频是在微软虚拟学院上,可注册观看:http://www.microsoftvirtualacademy.com/training-courses/796?o5590视频分10章:1.克服对shell的恐惧2.帮助系统3.使用管道连接和扩展shell4.用于管理的对象5.深入探讨管道6.在shell中使用powershell&am…

阿里一面 缓存穿透、缓存击穿、缓存雪崩和热点数据失效问题的解决方案

作者:乔二爷,来自:乔二爷(ID:hellozhouq)1 前言昨天晚上接到阿里的电面电话,过程中就问到了关于缓存相关的问题。虽然以前接触过,多多少少了解了一些。但是之前自己并没有好好记录这…

Fix chrome 下flash crash的问题

2019独角兽企业重金招聘Python工程师标准>>> 本来好好的,结果不知道为什么,在MAC下使用chrome不断出现flash插件的错误,网上搜了一下,看这里,要把chrome自带的flash插件注释掉。重启chrome好象是没什么问题…

为什么阿里巴巴建议集合初始化时,指定集合容量大小?

集合是Java开发日常开发中经常会使用到的。在之前的一些文章中,我们介绍过一些关于使用集合类应该注意的事项,如《为什么阿里巴巴禁止在 foreach 循环里进行元素的 remove/add 操作》。关于集合类,《阿里巴巴Java开发手册》中其实还有另外一个…