Tengo un archivo DLL de un instalador anterior de WiSE que estoy tratando de trabajar en WiX, así que estoy bastante seguro de que la DLL funciona con instaladores basados en MSI.WiX - Pasar parámetros a una CustomAction (DLL)
Aquí es mi definición:
<Binary Id="SetupDLL" SourceFile="../Tools/Setup.dll" />
<CustomAction Id="ReadConfigFiles" BinaryKey="SetupDLL" DllEntry="readConfigFiles" />
y uso:
función<Publish Dialog="InstallDirDlg" Control="Next" Event="DoAction" Value="ReadConfigFiles" Order="3">1</Publish>
Mi C++ es el siguiente:
extern "C" UINT __stdcall ReadConfigFiles(MSIHANDLE hInstall, CHAR * szDirectory)
exactamente dónde puedo pasar en los parámetros?
y cch_value es longitud del búfer (en caso de que alguien se pregunta, tuve que cavar un poco para encontrar esto fuera;) Hay algunos ejemplos más en profundidad, pero un "truco" que encontré si no se conoce la longitud es llamar a MsiGetProperty con bufferLen = 0, que falla porque no hay suficiente espacio para almacenar un valor pero también llena el bufferLen de cuánto espacio se necesita para almacenar el valor real. Llamar a MsiGetProperty nuevamente (asegurándose de asignar valor = TCHAR [bufferLen + 1] con +1 para dejar espacio para un terminador nulo) devolverá el valor real. – glenneroo
Sí, cch es la notación húngara de Microsoft para "Count of CHaracters", en contraposición a cb que es "Count of Bytes". –
Y sí, eso es un [comportamiento documentado] (https://msdn.microsoft.com/en-us/library/windows/desktop/aa370134 (v = vs.85) .aspx). Win32 y el shell fueron bastante consistentes en seguir este patrón. –