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

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

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

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

具體示例程序如下:

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

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

相關(guān)文章

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

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

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

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

    這篇文章主要介紹了Visual Studio 2022無法打開源文件的解決方式,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    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++中一類或者一個結(jié)構(gòu)體可以包含函數(shù)(這個函數(shù)在C++我們通常中稱為成員函數(shù)),C++中的結(jié)構(gòu)體和類體現(xiàn)了數(shù)據(jù)結(jié)構(gòu)和算法的結(jié)合
    2013-10-10
  • VC++實現(xiàn)添加文件關(guān)聯(lián)的方法示例

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

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

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

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

    c++支持coroutine的簡單示例

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

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

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

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

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

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

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

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

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

最新評論

彭泽县| 即墨市| 高雄市| 华坪县| 古丈县| 和龙市| 买车| 进贤县| 霍州市| 当涂县| 西林县| 陵川县| 尚志市| 清丰县| 舒兰市| 深泽县| 买车| 隆子县| 潮安县| 盱眙县| 正宁县| 九寨沟县| 图木舒克市| 澄江县| 德安县| 汕头市| 舟山市| 桑植县| 临江市| 耿马| 黄浦区| 襄垣县| 上高县| 三江| 威宁| 灵川县| 瑞安市| 宁津县| 垣曲县| 敦煌市| 文登市|