Hi Dave, Im not experienced in C/C++ custom actions, but in VBScript you are unable to access any Property during the deferred sequence.
You can workaround this with the following trick: Create a immediate custom action which reads out the "SourceDir" Property and places the value into a property with the exactly same name as the deferred custom action. Afterward you should be able to access the value through the "virtual" property called CustomActionData. Kind Regards, Fabio Di Lorenzo On Fri, Sep 10, 2010 at 3:26 AM, Dave DaveLists <dbfli...@gmail.com> wrote: > (Wix 3.5) > > I have an installer that places a DLL in the installed program's > directory and which we call into to do some custom twiddling at the > end of the install. A bit like this: > > <CustomAction Id="InitializeProduct" FileKey="OurDLL.dll" > DllEntry="InitializeTheProduct" Execute="deferred" Return="ignore" > Impersonate="no" /> > <InstallExecuteSequence> > <Custom Action="InitializeProduct" > Before="InstallFinalize">WixUI_InstallMode=""</Custom> > </InstallExecuteSequence> > > This has been working great. Inside the function > "InitializeTheProduct" function in the DLL, I now wish to call > MsiGetProperty to get the SOURCEDIR property but this is failing. I > found a lot of sample code for calling MsiGetProperty so I copied the > pattern (abbreviated a bit to keep this post as small as I can): > > extern "C" __declspec(dllexport) UINT _stdcall > InitializeTheProduct(MSIHANDLE hInstaller) > { > TCHAR* szValueBuf = NULL; > DWORD cchValueBuf = 0; > > UINT uiStat = MsiGetProperty(hInstaller, TEXT("SOURCEDIR"), > TEXT(""), &cchValueBuf); > if (ERROR_MORE_DATA == uiStat) > { > ++cchValueBuf; > szValueBuf = new TCHAR[cchValueBuf]; > uiStat = MsiGetProperty(hInstaller, TEXT("SourceDir"), > szValueBuf, &cchValueBuf); > } > > if (szValueBuf != NULL) delete[] szValueBuf; > return ERROR_SUCCESS; > } > > The behavior of all this is, I get ERROR_MORE_DATA back from the first > call, as expected, but cchValueBuf is 0. I would have expected a > different return value if it could not find the property, so a return > that says, "Your size of 0 isn't big enough, use 0" is interesting. > The 2nd call actually returns ERROR_SUCCESS, but no property. > > I've tried various permutations of SOURCEDIR (SourceDir, [SOURCEDIR]), > and also tried to reference some custom properties, all with the same > result. For SourceDir I put in a ResolveSource action to see if that > was the problem but it wasn't. The log shows valid values for all the > properties I've tried so I am flummoxed. > > Any thoughts out there on similar troubles found? With Google and Bing > search I found some common problems but none applied. Any thoughts > apprecitated. Barring that, the reason I am doing this to begin with > is I need my DLL entry point to know the path to the MSI that called > it, so is there another way of doing this? > > -Dave > > > ------------------------------------------------------------------------------ > Automate Storage Tiering Simply > Optimize IT performance and efficiency through flexible, powerful, > automated storage tiering capabilities. View this brief to learn how > you can reduce costs and improve performance. > http://p.sf.net/sfu/dell-sfdev2dev > _______________________________________________ > WiX-users mailing list > WiX-users@lists.sourceforge.net > https://lists.sourceforge.net/lists/listinfo/wix-users > ------------------------------------------------------------------------------ Automate Storage Tiering Simply Optimize IT performance and efficiency through flexible, powerful, automated storage tiering capabilities. View this brief to learn how you can reduce costs and improve performance. http://p.sf.net/sfu/dell-sfdev2dev _______________________________________________ WiX-users mailing list WiX-users@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/wix-users