tag:blogger.com,1999:blog-9537945.post4240952474142430586..comments2023-08-20T04:16:39.520-05:00Comments on Deployment Engineering Archive: Data Driven Managed Custom Actions made easy with DTFChristopher Painterhttp://www.blogger.com/profile/12167478740431444267noreply@blogger.comBlogger1125tag:blogger.com,1999:blog-9537945.post-1812807925161281802008-05-20T12:32:00.000-05:002008-05-20T12:32:00.000-05:00Excluding the boilerplate for EXPORTS, return code...Excluding the boilerplate for EXPORTS, return codes, etc., the C++ would look something like the code below. Checking return codes would probably add about one line per ::Msi call, although it may be hidden in a macro.<BR/><BR/>UINT ProcessMath(MSIHANDLE hInstall)<BR/>{<BR/> PMSIHANDLE hDatabase = ::MsiGetActiveDatabase(hInstall);<BR/> PMSIHANDLE hView, hRec;<BR/><BR/> ::MsiOpenView(_T("SELECTAnonymousnoreply@blogger.com