欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

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ù)庫里面的各種表關(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)文章

  • Mac OS X 10.8 中編譯APUE(Unix環(huán)境高級(jí)編程)的源代碼過程

    Mac OS X 10.8 中編譯APUE(Unix環(huán)境高級(jí)編程)的源代碼過程

    這篇文章主要介紹了Mac OS X 10.8 中編譯APUE(Unix環(huán)境高級(jí)編程)的源代碼過程,對(duì)于用MAC學(xué)習(xí)Unix環(huán)境高級(jí)編程的同學(xué)會(huì)有些作用,需要的朋友可以參考下
    2014-09-09
  • 在std::thread中創(chuàng)建并管理QEventLoop的全面解析

    在std::thread中創(chuàng)建并管理QEventLoop的全面解析

    QEventLoop的工作原理可以簡(jiǎn)單地理解為一個(gè)無限循環(huán),它會(huì)不斷地檢查是否有新的事件需要處理,如果有,就將事件從事件隊(duì)列中取出,然后找到相應(yīng)的事件處理器進(jìn)行處理,這篇文章主要介紹了在std::thread中創(chuàng)建并管理QEventLoop的全面指南,需要的朋友可以參考下
    2023-06-06
  • C語言面試C++字符串替換空格示例

    C語言面試C++字符串替換空格示例

    這篇文章主要介紹了C語言面試中C++字符串替換空格示例,文中給出了基本上可以拿下offer的代碼,有需要的朋友可以借鑒參考下,希望大家都能早日拿到心儀的offer
    2021-09-09
  • C/C++?控制臺(tái)等待指令解析

    C/C++?控制臺(tái)等待指令解析

    這篇文章主要介紹了C/C++?控制臺(tái)等待指令解析,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-07-07
  • C++中std::find函數(shù)介紹和使用場(chǎng)景

    C++中std::find函數(shù)介紹和使用場(chǎng)景

    std::find函數(shù)是一個(gè)非常實(shí)用的通用查找算法,適用于各種場(chǎng)景,本文主要介紹了C++中std::find函數(shù)介紹和使用場(chǎng)景,具有一定的參考價(jià)值,感興趣的可以了解一下
    2024-02-02
  • C++哈希表之閉散列方法的模擬實(shí)現(xiàn)詳解

    C++哈希表之閉散列方法的模擬實(shí)現(xiàn)詳解

    閉散列指(開放定址法)發(fā)生沖突時(shí),如果哈希表沒有被填滿,則表內(nèi)一定還有其他空閑位置,可以把沖突值放到下一個(gè)沒有被占用的空余位置上。本文將模擬實(shí)現(xiàn)閉散列方法,需要的可以參考一下
    2022-11-11
  • C語言實(shí)現(xiàn)圖片放大縮小

    C語言實(shí)現(xiàn)圖片放大縮小

    這篇文章主要為大家詳細(xì)介紹了C語言實(shí)現(xiàn)圖片放大縮小,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-05-05
  • C++ deque容器的具體使用

    C++ deque容器的具體使用

    deque又稱雙端隊(duì)列容器。deque容器中存儲(chǔ)元素并不能保證所有元素都存儲(chǔ)到連續(xù)的內(nèi)存空間中,本文詳細(xì)的介紹了C++ deque容器的使用,感興趣的可以了解一下
    2021-05-05
  • C++實(shí)現(xiàn)高校教室管理系統(tǒng)

    C++實(shí)現(xiàn)高校教室管理系統(tǒng)

    這篇文章主要為大家詳細(xì)介紹了C++實(shí)現(xiàn)高校教室管理系統(tǒng),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-03-03
  • C++ 標(biāo)準(zhǔn)模板類詳解

    C++ 標(biāo)準(zhǔn)模板類詳解

    今天小編就為大家分享一篇關(guān)于C++標(biāo)準(zhǔn)模板類的介紹與使用講解,小編覺得內(nèi)容挺不錯(cuò)的,現(xiàn)在分享給大家,具有很好的參考價(jià)值,需要的朋友一起跟隨小編來看看吧
    2021-09-09

最新評(píng)論