Index: installer/src/installer-lib/session.cpp |
=================================================================== |
new file mode 100644 |
--- /dev/null |
+++ b/installer/src/installer-lib/session.cpp |
@@ -0,0 +1,53 @@ |
+/** |
+ * \file session.cpp Implementation of Session class. |
+ */ |
+ |
+#include "session.h" |
+#include "property.h" |
+#include "msiquery.h" |
+ |
+//----------------------------------------------------------------------------------------- |
+// Session |
+//----------------------------------------------------------------------------------------- |
+Session::Session( MSIHANDLE handle, std::wstring name ) |
+ : handle( handle ), |
+ log_prefix( name + L": " ) |
+{ |
+ log( L"Entering custom action" ) ; |
+} |
+ |
+/** |
+ * \par Implementation Notes |
+ * The session handle doesn't need to be closed. |
+ * It's provided as an argument to the custom action at the outset, and we do not manage its life cycle. |
+ */ |
+Session::~Session() |
+{ |
+ log( L"Exiting custom action" ) ; |
+} |
+ |
+/** |
+ * \par Implementation Notes |
+ * To write to the installation log, we use a call to MsiProcessMessage with message type INSTALLMESSAGE_INFO. |
+ * The text to be written needs to go in a "record" (yes, a database record) that acts as an argument vector. |
+ * For the message type we're using, we need only a record with a single field. |
+ * |
+ * \sa MSDN "MsiProcessMessage function" |
+ * http://msdn.microsoft.com/en-us/library/windows/desktop/aa370354%28v=vs.85%29.aspx |
+ * MsiProcessMessage is mostly for user interaction with message boxes, but it's also the access to the installation log. |
+ */ |
+void Session::log( std::wstring message ) |
+{ |
+ Record r = Record( 1 ); |
+ r.assign_string( 0, log_prefix + message ); |
+ int e = MsiProcessMessage( handle, INSTALLMESSAGE_INFO, r.handle() ) ; |
+ if ( e != IDOK ) |
+ { |
+ throw std::runtime_error( "Did not succeed writing to log." ) ; |
+ } |
+} |
+ |
+Immediate_Session::Immediate_Session( MSIHANDLE handle, std::wstring name ) |
+ : Session( handle, name ) |
+{ |
+} |