Left: | ||
Right: |
OLD | NEW |
---|---|
(Empty) | |
1 /** | |
2 * \file session.h The "install session" is the context for all custom installat ion behavior. | |
3 */ | |
4 | |
5 #ifndef SESSION_H | |
6 #define SESSION_H | |
7 | |
8 #include "property.h" | |
9 #include "record.h" | |
Wladimir Palant
2013/10/29 08:49:26
You should forward-declare the classes instead of
Eric
2013/10/29 14:00:58
"record.h" I think is some dead code I forgot to r
| |
10 | |
11 #include <string> | |
12 #include "windows.h" | |
13 #include "msi.h" | |
14 | |
15 //------------------------------------------------------------------------------ ----------- | |
16 // Session | |
17 //------------------------------------------------------------------------------ ----------- | |
18 /** | |
19 * A Windows Installer session | |
20 * | |
21 * Always instantiate an instance of this class at the start of each custom acti on. | |
22 * Copy and assignment are disabled, so session objects are always passed by ref erence. | |
23 * | |
24 * This class is the base for both immediate and deferred custom actions. | |
25 * Immediate custom actions always have an installer database associated with th em; deferred actions never do. | |
26 * Both immediate and deferred actions may be executed synchronously or asynchro nously; this class is silent about any difference. | |
27 * | |
28 * \par Notes | |
29 * This class is patterned after WcaInitialize/WcaFinalize of the WiX custom a ction library. | |
30 * There are two things that class does that this one does not. | |
31 * - Extract the file version information from the DLL using GetModuleFileName * and GetFileVersionInfo* system calls. | |
32 * - Set a "global atom" (a Windows system object) to store the logging state, later to be accessed by deferred actions. | |
33 */ | |
34 class Session { | |
35 public: | |
36 /** | |
37 * Destructor. | |
38 */ | |
39 ~Session() ; | |
40 | |
41 /** | |
42 * Write a message to the installation log. | |
43 */ | |
44 void log( std::wstring message ) ; | |
45 | |
46 protected: | |
47 /** | |
48 * Ordinary constructor is protected; public constructors are all in subclasse s. | |
49 * The MSI system uses a single handle type for all types of sessions. This ha ndle is here in this base class. | |
50 * | |
51 * \param[in] handle | |
52 * Handle for the Windows Installer session provided as an argument to a cu stom action. | |
53 * \param[in] name | |
54 * The name of the custom action, used for logging. | |
55 */ | |
56 Session( MSIHANDLE handle, std::wstring name ) ; | |
57 | |
58 protected: | |
59 /** | |
60 * Handle for the Windows Installer session. | |
61 */ | |
62 MSIHANDLE handle ; | |
63 | |
64 private: | |
65 /** | |
66 * Prefix for log messages. Contains the name of the custom action. | |
67 */ | |
68 std::wstring log_prefix ; | |
69 | |
70 /** | |
71 * Private copy constructor is declared but not defined. | |
72 */ | |
73 Session( const Session & ) ; | |
74 | |
75 /** | |
76 * Private assignment operator is declared but not defined. | |
77 */ | |
78 Session & operator=( const Session & ) ; | |
79 | |
80 /** | |
81 * The Property class requires access to the session handle. | |
82 */ | |
83 friend Property::Property( Session & session, std::wstring name ) ; | |
Wladimir Palant
2013/10/29 08:49:26
The main purpose of this class is holding the sess
Eric
2013/10/29 14:00:58
Well, it's a design goal of mine to hide the handl
Wladimir Palant
2013/10/29 15:06:38
Lifetime management is easily solved - either you
| |
84 }; | |
85 | |
86 //------------------------------------------------------------------------------ ----------- | |
87 // Immediate_Session | |
88 //------------------------------------------------------------------------------ ----------- | |
89 /** | |
90 * Session for immediate custom actions. | |
91 * | |
92 * Access to the installer database is by passing a reference to a class of this subtype to a Database constructor. | |
93 */ | |
94 class Immediate_Session : public Session | |
95 { | |
96 public: | |
97 /** | |
98 * Ordinary constructor. | |
99 * | |
100 * \param[in] handle | |
101 * Handle for the Windows Installer session provided as an argument to a cu stom action. | |
102 * \param[in] name | |
103 * The name of the custom action, used for logging. | |
104 */ | |
105 Immediate_Session( MSIHANDLE handle, std::wstring name ) ; | |
106 | |
107 private: | |
108 /* | |
109 * Allow helper function for Installation_Database constructor to have access to the handle. | |
110 */ | |
111 friend MSIHANDLE get_active_database( Immediate_Session & session ) ; | |
112 }; | |
113 | |
114 | |
115 //------------------------------------------------------------------------------ ----------- | |
116 // Deferred_Session | |
117 //------------------------------------------------------------------------------ ----------- | |
118 /** | |
119 * Session for deferred custom actions. | |
120 * | |
121 * There's much less context information easily available from a deferred custom action. | |
122 * | |
123 * /sa MDSN "Deferred Execution Custom Actions" | |
124 * http://msdn.microsoft.com/en-us/library/windows/desktop/aa368268%28v=vs.8 5%29.aspx | |
125 * for general information. | |
126 * | |
127 * /sa MSDN "Obtaining Context Information for Deferred Execution Custom Actions " | |
128 * http://msdn.microsoft.com/en-us/library/windows/desktop/aa370543%28v=vs.8 5%29.aspx | |
129 * lists the API calls available. | |
130 */ | |
131 class Deferred_Session : public Session | |
132 { | |
133 public: | |
134 /** | |
135 * Ordinary constructor. | |
136 * | |
137 * \param[in] handle | |
138 * Handle for the Windows Installer session provided as an argument to a cu stom action. | |
139 * \param[in] name | |
140 * The name of the custom action, used for logging. | |
141 */ | |
142 Deferred_Session( MSIHANDLE handle, std::wstring name ) ; | |
143 }; | |
Wladimir Palant
2013/10/29 08:49:26
As with the Database object, I'm not a fan of the
| |
144 | |
145 | |
146 //------------------------------------------------------------------------------ ----------- | |
147 // Commit_Session | |
148 //------------------------------------------------------------------------------ ----------- | |
149 /** | |
150 * The session for a commit custom action. NOT IMPLEMENTED. | |
151 * | |
152 * \sa MSDN "Commit Custom Actions" http://msdn.microsoft.com/en-us/library/wind ows/desktop/aa367991%28v=vs.85%29.aspx | |
153 */ | |
154 class Commit_Session | |
155 { | |
156 }; | |
157 | |
158 //------------------------------------------------------------------------------ ----------- | |
159 // Rollback_Session | |
160 //------------------------------------------------------------------------------ ----------- | |
161 /** | |
162 * The session for a rollback custom action. NOT IMPLEMENTED. | |
163 * | |
164 * \sa MSDN "Rollback Custom Actions" http://msdn.microsoft.com/en-us/library/wi ndows/desktop/aa371369%28v=vs.85%29.aspx | |
165 */ | |
166 class Rollback_Session | |
167 { | |
168 }; | |
169 | |
170 #endif | |
OLD | NEW |