(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