依星源码资源网,依星资源网

 找回密码
 立即注册

QQ登录

只需一步,快速开始

【好消息,好消息,好消息】VIP会员可以发表文章赚积分啦 !
查看: 8|回复: 0

NSIS日常使用 windows下使用nsis

[复制链接] 主动推送

1万

主题

1万

帖子

1万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
19638
发表于 昨天 17:02 | 显示全部楼层 |阅读模式
NSIS日常使用  windows下使用nsis
1.nsis简介
NSIS(Nullsoft Scriptable Install System)是一个开源的 Windows 系统下安装程序制作程序。它提供了安装、卸载、系统设置、文件解压缩等功能。NSIS 通过它的脚本语言来描述安装程序的行为和逻辑的。NSIS 的脚本语言和通常的编程语言有类似的结构和语法,但它是为安装程序这类应用所设计的。

2.目录介绍
1.1 关于 NSIS - NSIS 用户手册 - 开发文档 - 文江博客 (wenjiangs.com)

3.NSIS语法
!define NAME "test"        宏定义NAME为test
!include "common.nsh"        包含头文件

VIProductVersion "1.0.0.0"                                          //产品版本
VIAddVersionKey /LANG=2052 "ProductName"        "Demo01"            //产品名称
VIAddVersionKey /LANG=2052 "CompanyName"        "MyCompany"         //公司名称
VIAddVersionKey /LANG=2052 "ProductVersion"     "1.0.0.0"           //产品版本
VIAddVersionKey /LANG=2052 "LegalCopyright"     "2014 China"        //版权
VIAddVersionKey /LANG=2052 "FileDescription"    "Demo01 安装程序"    //文件说明
VIAddVersionKey /LANG=2052 "FileVersion"        "1.0.0.0"           //文件版本

var ShortCutPath    //自定义变量
StrCpy $ShortCutPath  "C:\Program Files (x86)"    //变量赋值

OutFile "20221023_test.exe"    //生产的exe的名称

RequestExecutionLevel admin    //安装安装包时使用管理员权限
RequestExecutionLevel user     //安装安装包时使用当前用户权限
SetShellVarContext current    //将操作应用到当前用户(配合RequestExecutionLevel使用)
SetShellVarContext all        //将操作应用到所有用户(配合RequestExecutionLevel使用)

Icon              "icon/logo.ico"        //安装程序图标(相对路径)
UninstallIcon     "icon/unlogo.ico"      //卸载程序图标

System::Call    "game.exe"    //操作系统调用,可以调用一些系统接口
System::Call "Kernel32::GetUserDefaultUILanguage(v ..) i .s"    //获取系统当前用户的用户 UI 语言

//设置默认变量(总共有20个默认变量可用,遵循堆栈操作规则,后进先出)
Push $0    //设置
Push $1    //设置
Pop $1    //释放
Pop $0    //释放

ReadINIStr    //读取ini文件
ReadRegStr $INSTDIR_REG HKCU "SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\..." "InstallDir"//读取注册表InstallDir的值到INSTDIR_REG中
WriteRegDWORD HKCU "SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\..." "isupdate" 1 //写注册表
DeleteRegKey HKCU "Software\Microsoft\Windows\CurrentVersion\Uninstall\..." //删除注册表

添加卸载信息到控制面板
WriteRegStr HKCU "SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\test" "InstallDir" "c:\\temp\tempdir"      //安装路径
WriteRegStr HKCU "SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\test" "DisplayName" "test"                 //程序名称
WriteRegStr HKCU "SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\test" "UninstallString" "c:\\temp\uninst.exe" //卸载路径
WriteRegStr HKCU "SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\test" "DisplayIcon" "c:\\temp\icon.ico"  //图标
WriteRegStr HKCU "SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\test" "Publisher" "公司名"                //公司名
WriteRegStr HKCU "SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\test" "DisplayVersion" "1.0.0.0"         //版本号
WriteRegStr HKCU "SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\test" "InstallDate" "20221023"           //安装时间

添加开机启动
WriteRegStr HKCU "Software\Microsoft\Windows\CurrentVersion\Run" "test" "c:\\temp\tempdir\temp.exe"

Function startinstall
    code
    ....
FunctionEnd
call startinstall    //调用代码块

Delete "c:\temp.txt" //删除文件
RMDir  "c:\\temp" //删除文件
CreateDirectory "c:\\temp"
MessageBox MB_OKCANCEL|MB_ICONQUESTION|MB_TOPMOST|MB_DEFBUTTON1 "this is a test" IDOK +2   //messagebox弹出
SetOutPath "xxxx" //设置文件释放目录

//nsis待充分填写
Nsis7z::ExtractWithCallback "c:\\temp" $R9    //解压到指定目录

ExecWait "c:\\temp\password.exe" //安装某个exe
参数 /quiet  /very slient /s  静默安装

注册dll和ocx
RegDLL c:\\temp\capicom.dll
RegDLL c:\\\capicom1.ocx

CopyFiles /SILENT "c:\\temp\a.txt" "d:\\temp\a.txt" 从c盘复制到d盘
CreateShortCut "$DESKTOP\测试.lnk" "C:\Program Files (x86)\test\test.exe" //生成桌面快捷方式
//生成菜单栏快捷方式
nsDui::TaskbarPin "test.lnk" "HtSec.lnk" "$QUICKLAUNCH\User Pinned" 1
//卸载菜单栏快捷方式
ExecShell TaskbarUnPin "$DESKTOP\$vDESKTOP_SHORTCUT_NAME.lnk"
ExecShell TaskbarUnPin "$INSTDIR\${INST_SUBDIR}\${PRODUCT_PUBLISHER}\${EXE_DIR}\${EXE_NAME}.lnk"
ExecShell taskbarunpin "$DESKTOP\$vDESKTOP_SHORTCUT_NAME.lnk"
    ${StdUtils.InvokeShellVerb} $0 "$LOCALAPPDATA\${INST_SUBDIR}\${PRODUCT_PUBLISHER}\${EXE_DIR}" "${EXE_NAME}" ${StdUtils.Const.ShellVerb.UnpinFromTaskbar}
    //解决普通命令无法卸载菜单栏快捷方式的解决办法

WriteUninstaller "$INSTDIR\${INST_SUBDIR}\${NAME}\${UINST_EXE_NAME}" //生成卸载程序
ExecShell "open" "www.baidu.com" //执行shell脚本,打开百度

SendMessage    发送系统消息
SetErrorLevel
4.定制库的开发及使用
4.1定制dll

用vs创建一个dll工程

4.1.1包含头文件

#include <windows.h>
#include <commctrl.h>
#include <stdarg.h>
#include <tchar.h>
4.1.2输入
HINSTANCE g_hInstance;
HWND g_hwndParent;
extra_parameters* g_pluginParms = NULL;

#define NSMETHOD_INIT(parent)
{
g_pluginParms = extra;
g_hwndParent = parent;
EXDLL_INIT();
}
4.1.3添加测试代码
// NSIS插件导出函数,NSIS规定函数声明格式如下:
extern "C" __declspec(dllexport) void __cdecl
add ( HWND hwndParent, int string_size, char *variables, stack_t **stacktop, extra_parameters *extra)
{
    NSMETHOD_INIT(hwndParent);
    {
        // == 添加自己代码
        int i = popint();
        int j = popint();
        int k = i + j;
        MessageBox(NULL, _T("检查开始"), _T("提示"), MB_OK | MB_TASKMODAL);
        pushint(k);
        // ==
    }
}
4.1.4编译

编译,并将dll放到nsis/Plugins 目录下

4.2调用

在nsis合适位置,添加调用

(假定dll名为 test.dll)

test::add 1 2
Pop $0
${If} $0 == 3
    MessageBox MB_ICONEXCLAMATION|MB_TOPMOST  "dll内函数调用成功返回计算结果3" /SD IDOK
${EndIf}

相关帖子

扫码关注微信公众号,及时获取最新资源信息!下载附件优惠VIP会员6折;永久VIP4折
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

免责声明:
1、本站提供的所有资源仅供参考学习使用,版权归原著所有,禁止下载本站资源参与商业和非法行为,请在24小时之内自行删除!
2、本站所有内容均由互联网收集整理、网友上传,并且以计算机技术研究交流为目的,仅供大家参考、学习,请勿任何商业目的与商业用途。
3、若您需要商业运营或用于其他商业活动,请您购买正版授权并合法使用。
4、论坛的所有内容都不保证其准确性,完整性,有效性,由于源码具有复制性,一经售出,概不退换。阅读本站内容因误导等因素而造成的损失本站不承担连带责任。
5、用户使用本网站必须遵守适用的法律法规,对于用户违法使用本站非法运营而引起的一切责任,由用户自行承担
6、本站所有资源来自互联网转载,版权归原著所有,用户访问和使用本站的条件是必须接受本站“免责声明”,如果不遵守,请勿访问或使用本网站
7、本站使用者因为违反本声明的规定而触犯中华人民共和国法律的,一切后果自己负责,本站不承担任何责任。
8、凡以任何方式登陆本网站或直接、间接使用本网站资料者,视为自愿接受本网站声明的约束。
9、本站以《2013 中华人民共和国计算机软件保护条例》第二章 “软件著作权” 第十七条为原则:为了学习和研究软件内含的设计思想和原理,通过安装、显示、传输或者存储软件等方式使用软件的,可以不经软件著作权人许可,不向其支付报酬。若有学员需要商用本站资源,请务必联系版权方购买正版授权!
10、本网站如无意中侵犯了某个企业或个人的知识产权,请来信【站长信箱312337667@qq.com】告之,本站将立即删除。
郑重声明:
本站所有资源仅供用户本地电脑学习源代码的内含设计思想和原理,禁止任何其他用途!
本站所有资源、教程来自互联网转载,仅供学习交流,不得商业运营资源,不确保资源完整性,图片和资源仅供参考,不提供任何技术服务。
本站资源仅供本地编辑研究学习参考,禁止未经资源商正版授权参与任何商业行为,违法行为!如需商业请购买各资源商正版授权
本站仅收集资源,提供用户自学研究使用,本站不存在私自接受协助用户架设游戏或资源,非法运营资源行为。
 
在线客服
点击这里给我发消息 点击这里给我发消息 点击这里给我发消息
售前咨询热线
312337667

微信扫一扫,私享最新原创实用干货

QQ|免责声明|小黑屋|依星资源网 ( 鲁ICP备2021043233号-3 )|网站地图

GMT+8, 2025-7-30 06:45

Powered by Net188.com X3.4

邮箱:312337667@qq.com 客服QQ:312337667(工作时间:9:00~21:00)

快速回复 返回顶部 返回列表