MSIデータベース(hDatabase)を扱う単純なラッパクラス

(2005.01.14)
#pragma once
 
// '04.12.15 : 新規作成 (sug)
// '05.01.06 : テンプレート化 (sug)
 
#include <Msi.h>
#pragma comment (lib, "Msi.lib")
#include <MsiDefs.h>
#include <MsiQuery.h>
 
 
/////////////////////////////////////////////////////////////////////////////
// CMsiDatabaseT
 
template <bool t_bManaged>
class CMsiDatabaseT
{
public:
    CMsiDatabaseT()
    {
        m_hDatabase = 0;
    }
    CMsiDatabaseT(MSIHANDLE hDatabase)
    {
        m_hDatabase = hDatabase;
    }
    virtual ~CMsiDatabaseT()
    {
        if (t_bManaged && m_hDatabase != 0)
        {
            this->CloseHandle();
        }
    }
 
public:
    bool IsValid()
    {
        if (m_hDatabase == 0)
        {
            return false;
        }
 
        return true;
    }
    
public:
    void Attach(MSIHANDLE hDatabase)
    {
        ATLASSERT(m_hDatabase == 0);
        ATLASSERT(hDatabase != 0);
        m_hDatabase = hDatabase;
    }
    MSIHANDLE Detach()
    {
        ATLASSERT(m_hDatabase != 0);
        MSIHANDLE hDatabase = m_hDatabase;
        m_hDatabase = 0;
        return hDatabase;
    }
 
public:
    CMsiDatabaseT& operator=(MSIHANDLE hDatabase)
    {
        m_hDatabase = hDatabase;
        return *this;
    }
    operator MSIHANDLE()
    { 
        return m_hDatabase; 
    }
 
public:
    UINT CloseHandle()
    {
        ATLASSERT(m_hDatabase != 0);
        MSIHANDLE hDatabase = m_hDatabase;
        m_hDatabase = 0;
        return ::MsiCloseHandle(hDatabase);
    }
 
// Installer database access functions
public:
    UINT OpenView(LPCSTR szQuery, MSIHANDLE* phView)
    {
        ATLASSERT(m_hDatabase != 0);
        return ::MsiDatabaseOpenView(m_hDatabase, szQuery, phView);
    }
    UINT GetPrimaryKeys(LPCSTR szTableName, MSIHANDLE* phRecord)
    {
        ATLASSERT(m_hDatabase != 0);
        return ::MsiDatabaseGetPrimaryKeys(m_hDatabase, szTableName, phRecord);
    }
    MSICONDITION IsTablePersistent(LPCSTR szTableName)
    {
        ATLASSERT(m_hDatabase != 0);
        return ::MsiDatabaseIsTablePersistent(m_hDatabase, szTableName);
    }
 
// Summary information stream management functions
public:
    UINT GetSummaryInformation(LPCSTR szDatabasePath, UINT uiUpdateCount, MSIHANDLE* phSummaryInfo)
    {
        ATLASSERT(m_hDatabase != 0);
        return ::MsiGetSummaryInformation(m_hDatabase, szDatabasePath, uiUpdateCount, phSummaryInfo);
    }
 
// Installer database management functions
public:
    UINT Open(LPCSTR szDatabasePath, LPCSTR szPersist)
    {
        ATLASSERT(m_hDatabase == 0);
        return ::MsiOpenDatabase(szDatabasePath, szPersist, &m_hDatabase);
    }
    UINT Import(LPCSTR szFolderPath, LPCSTR szFileName)
    {
        ATLASSERT(m_hDatabase != 0);
        return ::MsiDatabaseImport(m_hDatabase, szFolderPath, szFileName);
    }
    UINT Export(LPCSTR szTableName, LPCSTR szFolderPath, LPCSTR szFileName)
    {
        ATLASSERT(m_hDatabase != 0);
        return ::MsiDatabaseExport(m_hDatabase, szTableName, szFolderPath, szFileName);
    }
    INT Merge(MSIHANDLE hDatabaseMerge, LPCSTR szTableName)
    {
        ATLASSERT(m_hDatabase != 0);
        return ::MsiDatabaseMerge(m_hDatabase, hDatabaseMerge, szTableName);
    }
    UINT GenerateTransform(MSIHANDLE hDatabaseReference, LPCSTR szTransformFile, int iReserved1, int iReserved2)
    {
        ATLASSERT(m_hDatabase != 0);
        return ::MsiDatabaseGenerateTransform(m_hDatabase, hDatabaseReference, szTransformFile, iReserved1, iReserved2);
    }
    UINT ApplyTransform(LPCSTR szTransformFile, int iErrorConditions)
    {
        ATLASSERT(m_hDatabase != 0);
        return ::MsiDatabaseApplyTransform(m_hDatabase, szTransformFile, iErrorConditions);
    }
    UINT CreateTransformSummaryInfo(MSIHANDLE hDatabaseReference, LPCSTR szTransformFile, int iErrorConditions, int iValidation)
    {
        ATLASSERT(m_hDatabase != 0);
        return ::MsiCreateTransformSummaryInfo(m_hDatabase, hDatabaseReference, szTransformFile, iErrorConditions, iValidation);
    }
    UINT Commit()
    {
        ATLASSERT(m_hDatabase != 0);
        return ::MsiDatabaseCommit(m_hDatabase);
    }
 
// Functions for rendering UI dialogs from the database representations.
public:
    UINT EnableUIPreview(MSIHANDLE* phPreview)
    {
        ATLASSERT(m_hDatabase != 0);
        return ::MsiEnableUIPreview(m_hDatabase, phPreview);
    }
 
public:
    MSIHANDLE m_hDatabase;  
};
 
typedef CMsiDatabaseT<false>        CMsiDatabaseHandle;
typedef CMsiDatabaseT<true>        CMsiDatabase;
一覧に戻る
© 2003 WAC.com All Right Reserved.