nsis打包总结

nsis打包总结

1.当程序正在运行时,安装程序给出提示框

我用的是系统调用:

参考链接如下:

http://nsis.sourceforge.net/Check_whether_your_application_is_running

http://nsis.sourceforge.net/Docs/System/System.html

Function .onInit
//调用参数意义参考msdn即可,i表示int32, b表示int8, t表示text   返回值赋给R0
System::Call 'kernel32::OpenMutex(i 0x100000, b 0, t "MyMutex") i .R0'
IntCmp $R0 0 Done
System::Call 'kernel32::CloseHandle(i $R0)'
MessageBox MB_ICONSTOP "$(appinconflict)"
Abort
Done:
FunctionEnd

2.如何实现密码卸载?

我的实现方法:要实现密码卸载,需要用户在安装的时候输入卸载密码。然后将密码保存起来,在用户卸载的时候对比用户输入的卸载密码即可。


//这里我加入两个页面,注意PasswordWriteReg页面是我用来获取PasswordInstallPage页面的信息的

//代码中涉及到的变量需要自己创建

//实现的功能是,用户必须输入安装密码方可安装

Page custom PasswordInstallPage PasswordWriteReg

Function PasswordInstallPage
nsDialogs::Create 1018
Pop $Dialog
${If} $Dialog == error
Abort
${Endif}
${NSD_CreateLabel} 0 36 100% 16u "$(passwordtext)"
Pop $Label
${NSD_CreateText} 0 65 100% 16u ""
Pop $Text

//获得“下一步”控件句柄
GetDlgItem $GetPwd $HWNDPARENT 1

//密码框内容发送改变
${NSD_OnChange} $Text TextChange

EnableWindow $GetPwd 0
nsDialogs::Show

FunctionEnd

Function PasswordWriteReg

//获取密码内容
${NSD_GetText} $Text $0
WriteRegStr HKLM "${PRODUCT_DIR_REGKEY}" "password" "$0"
FunctionEnd

//函数主要根据密码框中是否有内容

//来决定是否使能"下一步"按钮

Function TextChange
${NSD_GetText} $Text $0
${If} $0 != ""
EnableWindow $GetPwd 1
${Else}
EnableWindow $GetPwd 0
${EndIf}
FunctionEnd

3.如何实现中英文系统安装不乱码问题,让英文系统安装界面是英文,中文系统安装界面是中文?


; Language files
;中译英采用的机器翻译
!insertmacro MUI_LANGUAGE "English"
!insertmacro MUI_lANGUAGE "SimpChinese"
;------------Teacher----------------
LangString appinconflict ${LANG_SIMPCHINESE} "安装程序检测到 ${PRODUCT_NAME} 正在运行。请先关闭程序再安装"
LangString appinconflict ${LANG_ENGLISH} "The installer detects that ${PRODUCT_NAME} is running. Please close the program before installing."
LangString unsuccess ${LANG_SIMPCHINESE} "已成功地从你的计算机移除。"
LangString unsuccess ${LANG_ENGLISH} "Successfully removed from your computer. "

然后在相应展示内容的时候用相应的变量即可。


eg: MessageBox MB_ICONINFORMATION|MB_OK "$(^Name) $(unsuccess)"

4.如何修改显示在向导页头上的文字,如图示。

MUI内置的向导页面通过定义

!define MUI_PAGE_HEADER_TEXT text
显示在向导页头上的文字

!define MUI_PAGE_HEADER_SUBTEXT text
显示在向导页头上的文字,它是通常显示在 MUI_PAGE_HEADER_TEXT 之下,表示对 MUI_PAGE_HEADER_TEXT 的进一步解释。
对于使用 InstallOptions 的定制界面,使用宏 !insertmacro MUI_HEADER_TEXT “text1” “text2” 实现类似功能。

像上面的Page custom PasswordInstallPage PasswordWriteReg这个页面,就需要在function中使用宏!insertmacro MUI_HEADER_TEXT “text1” “text2″来实现修改。

参考链接:http://sgzystudio.cn/sgzy/forum.php?mod=viewthread&tid=251&extra=page%3D1

相似的问题:https://bbs.csdn.net/topics/391823203

搬运一下:

!include MUI2.nsh

Name "Example"
OutFile "Example.exe"
InstallDir $TEMP

ShowInstDetails show

; 欢迎页面
!insertmacro MUI_PAGE_WELCOME
; 安装目录选择页面
# 修改1
!define MUI_PAGE_HEADER_TEXT "选择目标文件夹"
!define MUI_PAGE_HEADER_SUBTEXT "选择您要安装$(^Name)的目标文件夹"
# 修改2
!define MUI_DIRECTORYPAGE_TEXT_TOP "即将安装$(^Name)到下列文件夹。要安装到其他文件夹,请单击浏览进行选择。$_CLICK"
!insertmacro MUI_PAGE_DIRECTORY
; 安装过程页面
!insertmacro MUI_PAGE_INSTFILES
; 安装完成页面
# 修改3
!define MUI_FINISHPAGE_TITLE "$(^Name)安装已完成!"
# 修改4
!define MUI_FINISHPAGE_TEXT "已成功安装$(^Name)到您的电脑中。"
!insertmacro MUI_PAGE_FINISH

!insertmacro MUI_LANGUAGE SimpChinese

# 安装按钮文字修改
InstallButtonText "继续(&C)"

Section Main

SectionEnd

多在网上搜一搜,多在官网瞧一瞧。

 

 

 

发表评论

电子邮件地址不会被公开。 必填项已用*标注