- Revenera Community
- :
- InstallShield
- :
- InstallShield Forum
- :
- InstallScript MsiGetProductInfo returns error 243 ERROR_MORE_DATA when INSTALLPROPERTY_INSTALLLOCATI...
- Mark Topic as New
- Mark Topic as Read
- Float this Topic for Current User
- Subscribe
- Mute
- Printer Friendly Page
- Mark as New
- Subscribe
- Mute
- Permalink
- Report Inappropriate Content
InstallScript MsiGetProductInfo returns error 243 ERROR_MORE_DATA when INSTALLPROPERTY_INSTALLLOCATION property value is more than 37 characters
I have a msi installer package and when I do a Major Upgrade the default install path is displayed. I want to be able to detect the previous install location and set it as the InstallDir property during Major Upgrade.
I've set up a function in InstallScript which uses MsiGetProductInfo() to get the previous install location from INSTALLPROPERTY_INSTALLLOCATION property and set it up as a custom action that runs after CostFinalize for condition IS_MAJOR_UPGRADE.
The below code works for a previous install path that is 37 characters or less.
eg This works C:\123456789012345678901234567890123\
NUMBER nBufferSize; NUMBER nResult; STRING sPCode[MAX_STRING]; STRING sInstallationDirectory[9999]; STRING sResult[MAX_STRING]; begin nBufferSize = 9999999; MsiGetProperty(hMSI,"MIGRATE",sPCode,nBufferSize); MessageBox(sPCode,INFORMATION); nResult = MsiGetProductInfo(sPCode, INSTALLPROPERTY_INSTALLLOCATION, sInstallationDirectory,nBufferSize); NumToStr(sResult,nResult); MessageBox("Result:"+sResult,SEVERE); MessageBox("INSTALLDIR:"+sInstallationDirectory,SEVERE); MsiSetProperty(hMSI, "INSTALLDIR", sInstallationDirectory); end;
When the previous install path is 38 characters or more it will return an empty string and the error code 234 ERROR_MORE_DATA.
I've increased the buffer to a large value and it still doesn't work.
I'm using installshield 2019 professional, anyone know why this is happening?
- Mark as New
- Subscribe
- Mute
- Permalink
- Report Inappropriate Content
Hi @tier_3
According to Microsoft, "BufferSize" variable will be updated with the new size during the ERROR_MORE_DATA, check what size is returned. more information can be found at the below link:
https://docs.microsoft.com/en-us/windows/win32/api/msi/nf-msi-msigetproductinfoa
As well see the below thread, which mentioned to configure the custom action to immediate execution to get the values:
- Mark as New
- Subscribe
- Mute
- Permalink
- Report Inappropriate Content
Hi @banna_k
I printed out the "BufferSize" value for the case where the path is C:\1234567890123456789012345678901234\ and it returned as 38. Which is exactly the number of characters of the path but I'm still getting error 234 which is ERROR_MORE_DATA.
My custom action is defintely set to "immediate Execution".
Any other ideas? Thanks.