最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

VC++創(chuàng)建msi文件的方法

 更新時(shí)間:2014年07月15日 11:23:58   投稿:shichen2014  
這篇文章主要介紹了VC++創(chuàng)建msi文件的方法,對(duì)于應(yīng)用程序的開發(fā)有一定的借鑒價(jià)值,需要的朋友可以參考下

采用VC++可以編寫自己軟件的安裝程序。這里只是創(chuàng)建安裝程序類型的msi文件,用orca打開是正確的文件格式,值得自己記錄一下了,msi數(shù)據(jù)庫(kù)里面的各種表關(guān)系復(fù)雜,不是一時(shí)半刻能研究清楚的。本文僅作一淺析,實(shí)現(xiàn)寫一個(gè)程序附到軟件程序的后面,這樣可以在編譯完成后直接會(huì)有安裝程序msi文件。就像平常下載的軟件,可以寫注冊(cè)表,創(chuàng)建桌面快捷方式,注冊(cè)各種軟件用到的組件和功能。

具體示例程序如下:

#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>

本程序僅實(shí)現(xiàn)簡(jiǎn)單的基本功能,讀者可根據(jù)自身的需要進(jìn)一步開發(fā)其他個(gè)性化功能,以滿足自身需求。

相關(guān)文章

  • C語(yǔ)言實(shí)現(xiàn)求解最小公倍數(shù)的算法示例

    C語(yǔ)言實(shí)現(xiàn)求解最小公倍數(shù)的算法示例

    這篇文章主要為大家介紹了C語(yǔ)言如何實(shí)現(xiàn)求解任意兩個(gè)正整數(shù)的最小公倍數(shù),文中采用了窮舉法和定理法。感興趣的小伙伴快來跟隨小編一起學(xué)習(xí)學(xué)習(xí)吧
    2021-12-12
  • Visual Studio 2022無法打開源文件的解決方式

    Visual Studio 2022無法打開源文件的解決方式

    這篇文章主要介紹了Visual Studio 2022無法打開源文件的解決方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-01-01
  • C與C++中結(jié)構(gòu)體的區(qū)別

    C與C++中結(jié)構(gòu)體的區(qū)別

    C中的結(jié)構(gòu)體只涉及到數(shù)據(jù)結(jié)構(gòu),而不涉及到算法,也就是說在C中數(shù)據(jù)結(jié)構(gòu)和算法是分離的,而到C++中一類或者一個(gè)結(jié)構(gòu)體可以包含函數(shù)(這個(gè)函數(shù)在C++我們通常中稱為成員函數(shù)),C++中的結(jié)構(gòu)體和類體現(xiàn)了數(shù)據(jù)結(jié)構(gòu)和算法的結(jié)合
    2013-10-10
  • VC++實(shí)現(xiàn)添加文件關(guān)聯(lián)的方法示例

    VC++實(shí)現(xiàn)添加文件關(guān)聯(lián)的方法示例

    這篇文章主要介紹了VC++實(shí)現(xiàn)添加文件關(guān)聯(lián)的方法,涉及VC++針對(duì)注冊(cè)表的寫入與VC事件響應(yīng)相關(guān)操作技巧,需要的朋友可以參考下
    2017-08-08
  • C++?超詳細(xì)分析數(shù)據(jù)結(jié)構(gòu)中的時(shí)間復(fù)雜度

    C++?超詳細(xì)分析數(shù)據(jù)結(jié)構(gòu)中的時(shí)間復(fù)雜度

    時(shí)間復(fù)雜度一般指時(shí)間復(fù)雜性。?在計(jì)算機(jī)科學(xué)中,時(shí)間復(fù)雜性,又稱時(shí)間復(fù)雜度,算法的時(shí)間復(fù)雜度是一個(gè)函數(shù),它定性描述該算法的運(yùn)行時(shí)間
    2022-03-03
  • c++支持coroutine的簡(jiǎn)單示例

    c++支持coroutine的簡(jiǎn)單示例

    這篇文章主要介紹了c++支持coroutine的簡(jiǎn)單示例,使用的是linux 平臺(tái)做的,需要的朋友可以參考下
    2014-03-03
  • C語(yǔ)言實(shí)現(xiàn)學(xué)生信息管理系統(tǒng)(文件版)

    C語(yǔ)言實(shí)現(xiàn)學(xué)生信息管理系統(tǒng)(文件版)

    這篇文章主要為大家詳細(xì)介紹了C語(yǔ)言實(shí)現(xiàn)學(xué)生信息管理系統(tǒng),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2020-07-07
  • C語(yǔ)言員工信息管理系統(tǒng)源代碼

    C語(yǔ)言員工信息管理系統(tǒng)源代碼

    這篇文章主要為大家詳細(xì)介紹了C語(yǔ)言員工信息管理系統(tǒng)源代碼,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2020-12-12
  • C++實(shí)現(xiàn)的分布式游戲服務(wù)端引擎KBEngine詳解

    C++實(shí)現(xiàn)的分布式游戲服務(wù)端引擎KBEngine詳解

    這篇文章主要詳細(xì)介紹了C++實(shí)現(xiàn)的分布式游戲服務(wù)端引擎KBEngine的概念以及使用方法,非常的實(shí)用,有需要的小伙伴可以參考下
    2015-03-03
  • C語(yǔ)言實(shí)現(xiàn)順序表的基本操作指南(注釋很詳細(xì))

    C語(yǔ)言實(shí)現(xiàn)順序表的基本操作指南(注釋很詳細(xì))

    線性表是最簡(jiǎn)單的數(shù)據(jù)結(jié)構(gòu),而順序表又是最簡(jiǎn)單的線性表,其基本思想是用一段地址連續(xù)的儲(chǔ)存單元依次存儲(chǔ)線性表的數(shù)據(jù)元素,下面這篇文章主要給大家介紹了關(guān)于C語(yǔ)言實(shí)現(xiàn)順序表的基本操作,需要的朋友可以參考下
    2021-10-10

最新評(píng)論

延边| 湄潭县| 光山县| 茌平县| 乳源| 常州市| 朝阳区| 边坝县| 通许县| 县级市| 兴化市| 肥东县| 黄梅县| 通化市| 淳安县| 卢氏县| 沅陵县| 临沂市| 丽水市| 乡宁县| 图片| 且末县| 奉化市| 巨鹿县| 安顺市| 沾化县| 聊城市| 鄂尔多斯市| 通江县| 花垣县| 松江区| 琼中| 桂平市| 嘉荫县| 英吉沙县| 赞皇县| 昭觉县| 平定县| 桓台县| 双江| 如皋市|