VC++ 创建msi文件
来源:互联网 发布:android listview优化 编辑:程序博客网 时间:2024/06/05 18:47
编写自己软件的安装程序
这里只是创建安装程序类型的文件,当然创建出来也是不能用的。找了好多天资料,看了好多天英语,终于能创建出msi文件了,用orca打开是正确的文件格式,值得自己记录一下了,msi数据库里面的各种表关系复杂,不是一时半刻能研究清楚的,现在先记录一个开头吧。希望研究过msi c++ 编程的大神们给点指导。想实现的目标是写一个程序附到软件程序后面,这样可以在编译完成后直接会有安装程序msi文件。就像平常下载的软件,可以写注册表,创建桌面快捷方式,注册各种软件用到的组件和功能。就简单的hello world 程序也是麻雀虽小,五脏俱全就显得专业了。
示例程序
#pragma once//CRT headers.#include <tchar.h>//windows platform headers.#include <Windows.h>//msi headers.#pragma comment(lib,"msi.lib")#include <Msi.h>#include <MsiQuery.h>INT APIENTRY _tWinMain(HINSTANCE,HINSTANCE,LPTSTR,INT){MSIHANDLE msiHandle=NULL;//create msi database.UINT openResult=MsiOpenDatabase(_T("Setup.msi"),MSIDBOPEN_CREATEDIRECT,&msiHandle);//create msil database failed.if(openResult != ERROR_SUCCESS){LPVOID formatMsg=NULL;MSIHANDLE errorCode=MsiGetLastErrorRecord();//format error code to string.FormatMessage(FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_SYSTEM,NULL,errorCode,MAKELANGID(LANG_NEUTRAL,SUBLANG_SYS_DEFAULT),(LPTSTR)&formatMsg,0,NULL);//output error message.MessageBoxEx(NULL,(LPTSTR)formatMsg,_T("tip window"),MB_OK, MAKELANGID(LANG_NEUTRAL,SUBLANG_SYS_DEFAULT));//free message buffer.LocalFree(formatMsg);formatMsg=NULL;return -1;}//commit msi database.UINT commitResult=MsiDatabaseCommit(msiHandle);if(commitResult != ERROR_SUCCESS){LPVOID formatMsg=NULL;MSIHANDLE errorCode=MsiGetLastErrorRecord();//format error code to string.FormatMessage(FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_SYSTEM,NULL,errorCode,MAKELANGID(LANG_NEUTRAL,SUBLANG_SYS_DEFAULT),(LPTSTR)&formatMsg,0,NULL);//output error message.MessageBoxEx(NULL,(LPTSTR)formatMsg,_T("tip window"),MB_OK, MAKELANGID(LANG_NEUTRAL,SUBLANG_SYS_DEFAULT));//free message buffer.LocalFree(formatMsg);formatMsg=NULL;return -1;}//close msi database handle.UINT closeResult=MsiCloseHandle(msiHandle);if(closeResult != ERROR_SUCCESS){LPVOID formatMsg=NULL;MSIHANDLE errorCode=MsiGetLastErrorRecord();//format error code to string.FormatMessage(FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_SYSTEM,NULL,errorCode,MAKELANGID(LANG_NEUTRAL,SUBLANG_SYS_DEFAULT),(LPTSTR)&formatMsg,0,NULL);//output error message.MessageBoxEx(NULL,(LPTSTR)formatMsg,_T("tip window"),MB_OK, MAKELANGID(LANG_NEUTRAL,SUBLANG_SYS_DEFAULT));//free message buffer.LocalFree(formatMsg);formatMsg=NULL;return -1;}return 0;}</span>
结果展示
总结
- 现在我研究的还不是很明白,不过最终的目的就是自己编写的软件需要一个安装程序,这样子就看着专业一些了,总是绿色软件很是不甘心。
2 0
- VC++ 创建msi文件
- MSI 文件
- .msi文件
- vc 创建文件
- VC++创建快捷方式文件
- VC创建BMP文件
- vc创建文件对话框
- 如何制作MSI文件
- 11,MSI文件简介
- exe转msi文件
- exe转msi文件
- NSIS安装msi文件
- NSIS安装msi文件
- MSI文件简介
- msi文件安装出错
- 制作msi文件
- msi文件是什么
- NSIS安装msi文件
- 最长递增子序列(LIS)
- 在Activity中调用本地服务(Service)中的方法
- SpringMVC中ModelAndView无法传值的问题
- 熬过六月,蜕变七月
- 伯努利分布详解(包含该分布数字特征的详细推导步骤)
- VC++ 创建msi文件
- POJ 2723 Get Luffy Out(2-SAT)
- c++ .inl 文件说明
- SQL分析--欺骗你的子查询
- 如何将图片保存至自定义分组
- Linux安装vsFTPd服务器详细教程
- Reachability 网络状态的使用和封装
- linux网络编程基础API(二)
- js获取表单的值