| Index: installer/src/installer-lib/database.cpp |
| =================================================================== |
| new file mode 100644 |
| --- /dev/null |
| +++ b/installer/src/installer-lib/database.cpp |
| @@ -0,0 +1,58 @@ |
| +/** |
| + * \file database.h MSI database |
| + */ |
| + |
| +#include "database.h" |
| +#include "msiquery.h" |
| + |
| +//----------------------------------------------------------------------------------------- |
| +// Database |
| +//----------------------------------------------------------------------------------------- |
| +/** |
| + * \par Implementation Notes |
| + * An MSI database handle is an overloaded type, used both for installation databases and one opened outside an installation. |
| + * Hence this base constructor initializes with that handle. |
| + * |
| + * \sa MSDN "Obtaining a Database Handle" |
| + * http://msdn.microsoft.com/en-us/library/windows/desktop/aa370541(v=vs.85).aspx |
| + */ |
| +Database::Database( MSIHANDLE handle ) |
| + : handle( handle ) |
| +{ |
| +} |
| + |
| +Database::~Database() |
| +{ |
| + MsiCloseHandle( handle ) ; |
| +} |
|
Wladimir Palant
2013/10/29 08:49:26
I cannot really imagine the situation where our cu
Eric
2013/10/29 14:00:58
Before I get into everything, let me start off by
Wladimir Palant
2013/10/29 15:06:38
Ok, I understand it that we will need a tool to ge
|
| + |
| +//----------------------------------------------------------------------------------------- |
| +// Installation_Database |
| +//----------------------------------------------------------------------------------------- |
| + |
| +/** |
| + * Helper function for Installation_Database constructor. |
| + * |
| + * \par Resource Allocator |
| + * Return value of this function, a handle, must be released in order to avoid a resource leak. |
| + * Passing it as an argument to the Database constructor is adequate. |
| + */ |
| +MSIHANDLE get_active_database( Immediate_Session & session ) |
| +{ |
| + MSIHANDLE h = MsiGetActiveDatabase( session.handle ) ; |
| + if ( h == 0 ) |
| + { |
| + throw std::runtime_error( "Failed to retrieve active databases" ) ; |
| + } |
| + return h ; |
| +} |
| + |
| +/** |
| + * \par Implementation Notes |
| + * The only thing this constructor needs to do is to initialize the base class. |
| + */ |
| +Installation_Database::Installation_Database( Immediate_Session & session ) |
| + : Database( get_active_database( session ) ) |
| +{ |
| + // empty body |
| +} |