编写NSIS插件输出安装过程的日志
来源:互联网 发布:java调用ant脚本 参数 编辑:程序博客网 时间:2024/06/02 03:28
实现打印安装过程中的日志到临时目录的文件中。日志文件以年月日为文件名。
static void MakeTempFileName(char* buf, int bufSize){char TempPath[MAX_PATH] = {0};GetTempPathA(MAX_PATH,TempPath);StringCbCopyA(buf,bufSize,TempPath);char TempName[MAX_PATH] = {0};struct tm *local;time_t t;t = time(NULL);local = localtime(&t);StringCbPrintfA(TempName,sizeof(TempName),"%d-%d-%d.txt",local->tm_year,local->tm_mon,local->tm_mday);StringCbCatA(buf,bufSize,TempName);}static FILE* fp = NULL;extern "C" void __declspec(dllexport)Log(HWND hwndParent, int string_size,CHAR *variables, stack_t **stacktop,extra_parameters *extra){int iFunctionCode = 0;BOOL bValue = FALSE;//插件初始化g_hwndParent = hwndParent;EXDLL_INIT();//获取NSIS脚本传入的参数,检查有效性char sz[4096] = {0};memset(sz,0,sizeof(sz));struct tm *local;time_t t;t = time(NULL);local = localtime(&t);StringCbCopy(sz,sizeof(sz),asctime(local));StringCbCat(sz,sizeof(sz)," ");popstring(sz + strlen(sz));StringCbCat(sz,sizeof(sz),"\r\n");//NSIS会频繁LoadLibary、FreeLibary。所以下面需要以追加方式写入。if (!fp){char szFilePath[MAX_PATH] = {0};MakeTempFileName(szFilePath,sizeof(szFilePath));fp = fopen(szFilePath,"ab");if (!fp){return;}}fwrite(sz,1,strlen(sz),fp);fflush(fp);//这一句可有可无}//这个函数需要在DLL_PROCESS_DETACH时调用它以关闭文件句柄。extern "C" void Uninitialize(){if (fp){fclose(fp);fp = NULL;}}
DLL被卸掉时保存文件,这里可能被多次调用。似乎NSIS每次调用一个插件的函数时都是LoadLibary,用完就FreeLibary
extern void Uninitialize();BOOL APIENTRY DllMain( HMODULE hModule, DWORD ul_reason_for_call, LPVOID lpReserved ){switch (ul_reason_for_call){case DLL_PROCESS_ATTACH:case DLL_THREAD_ATTACH:case DLL_THREAD_DETACH:break;case DLL_PROCESS_DETACH:Uninitialize();break;}return TRUE;}
0 0
- 编写NSIS插件输出安装过程的日志
- NSIS的插件开发
- NSIS安装工具的System插件的问题
- 分享一个使用NSIS制作安装包的UI插件
- 分享一个使用NSIS制作安装包的UI插件
- 制作NSIS命令行窗口输出插件
- Nsis 宏定义安装卸载过程中调用的函数
- 关于NSIS脚本语言的编写
- NSIS的有用的插件
- 编写自己的日志输出文件
- 使用Script.NET编写NSIS安装脚本
- NSIS静默安装VC运行库插件
- NSIS如何编写带参数的函数
- nsSkinEngine - 最好用的美化安装包NSIS DirectUI界面库插件
- NSIS插件开发的几个注意点
- log4j编写一个单独的日志输出类
- 安装自己编写的Chrome插件
- 35-关于日志Log输出插件Log4Net的总结
- 在shell脚本中调用另一个脚本的三种不同方法(fork, exec, source)
- 将float元素居中的几种办法
- HDU 5618 分治
- stm8s 实践课程之IAP设计编码(bootloader实现)
- Ajax进阶---JQuery中的Ajax(上)--代码是自己敲上去的
- 编写NSIS插件输出安装过程的日志
- K-Means实验
- Collection之List and Set
- 二叉搜索树的后序遍历序列
- Android Handler 梳理(二)
- 广义线性模型
- 第五次c++上机实验报告
- X
- 存储器管理总结