NSIS自定义dll扩展

NSIS是一个功能强大的安装卸载包制作工具,通过dll可以扩展很多功能,你也可以自定义一个dll,以下是具体步骤:

1.新建一个mfc dll(本例Hello.dll)

1.1 添加对nsis库的引用:


在Hello.cpp中声明对nsis库的引用:

// Hello.cpp : 定义 DLL 的初始化例程。
//

#include "stdafx.h"
#include "Hello.h"

#include <windows.h>
#include <stdio.h>

// 生成的dll放置在NSIS\Plugins下
// 项目属性->配置属性->链接器->输入->忽略特定库: LIBC.lib(解决无法打开libc.lib的错误)
#include "nsis/pluginapi.h" // nsis plugin,需要拷贝nsis的库文件
#pragma comment(lib, "nsis/pluginapi.lib")
#define NSISAPI extern "C" __declspec(dllexport) void __cdecl	//C,避免nsis脚本重定义函数名


1.2 完成一个用来测试的方法:

/*
 * 在nsis脚本中调用方法myPlugin::myFunction /NOUNLOAD $2
 *  /NOUNLOAD 表示调用完此方法后不卸载这个dll,用于保存dll的数据
 * hwndParent:安装窗口的句柄
 * stacktop:nsis传入的参数堆栈, 通过popint/popstring 可以取出来
 * extra:插件里面调用script的函数就需要用到这个
 */
NSISAPI TestFunc(HWND hwndParent, int string_size, char *variables, stack_t **stacktop, extra_parameters *extra)
{
	EXDLL_INIT();	//初始化,方法开始位置必加

	char sParam[MAX_PATH];
	if(popstring(sParam) == 0)
	{
		CString str;
		str = sParam;
		AfxMessageBox(str);
	}
}


2.新建一个hello.nsi来测试我们的dll是否可以被调用成功

nsis脚本:

OutFile "Test.exe"

Section
    Hello::TestFunc /NOUNLOAD "hello nsis dll"
SectionEnd

编译运行,调用成功效果如下:




NSIS 是一款常用的安装程序制作工具,可以通过编写脚本来制作安装程序。如果想要自定义 NSIS 安装程序的界面,可以借助 Qt 框架来实现。 下面是一个简单的示例,演示如何在 NSIS 中使用 Qt 自定义界面。 首先,需要安装 Qt,并创建一个 Qt 程序,设计好自定义界面。然后,在 NSIS 脚本中引入 Qt 库,并将 Qt 程序编译成动态链接库(DLL)文件。 ``` ; 引入 Qt 库 !include "NSIS\Contrib\UIs\modernui\MUI.nsh" !include "NSIS\Contrib\Modern UI 2\Headers\ModernUI.nsh" !include "nsDialogs.nsh" ; 引入 DLL 文件 !define DLL_NAME "MyCustomUI.dll" !define DLL_PATH "path\to\MyCustomUI.dll" ; 安装程序界面 !define MUI_HEADERIMAGE !define MUI_HEADERIMAGE_BITMAP "path\to\header.bmp" !define MUI_WELCOMEFINISHPAGE_BITMAP "path\to\welcome.bmp" ; 安装程序页面 !insertmacro MUI_PAGE_WELCOME !insertmacro MUI_PAGE_INSTFILES ; 引入自定义界面 !insertmacro MUI_LANGUAGE "English" !define MUI_CUSTOMFUNCTION_GUIINIT MyGUIInit Function MyGUIInit ; 载入 Qt 库 LoadLibrary "${DLL_PATH}" ; 调用 Qt 界面 Call "MyCustomUI::ShowUI" FunctionEnd ``` 在上面的示例中,`MyCustomUI.dll` 是 Qt 程序编译生成的 DLL 文件,包含自定义的界面。通过 NSIS 脚本中的 `LoadLibrary` 函数来加载 DLL 文件,然后调用 DLL 中的函数来显示自定义界面。 需要注意的是,在编写 NSIS 脚本时,需要将 Qt 库的路径加入到系统环境变量中,以便 NSIS 能够找到 Qt 库并引入。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值