Ho una DLL da un vecchio programma di installazione guisa che sto cercando di far funzionare in WiX, quindi sono abbastanza sicuro che la DLL funziona con gli installatori MSI-based.WiX - Passaggio di parametri a una CustomAction (DLL)
Ecco la mia definizione:
<Binary Id="SetupDLL" SourceFile="../Tools/Setup.dll" />
<CustomAction Id="ReadConfigFiles" BinaryKey="SetupDLL" DllEntry="readConfigFiles" />
e il loro utilizzo:
funzione<Publish Dialog="InstallDirDlg" Control="Next" Event="DoAction" Value="ReadConfigFiles" Order="3">1</Publish>
mio C++ si presenta così:
extern "C" UINT __stdcall ReadConfigFiles(MSIHANDLE hInstall, CHAR * szDirectory)
Dove esattamente posso passare parametri?
& cch_value è la lunghezza del buffer (nel caso in cui qualcun altro si sta chiedendo, ho dovuto scavare un po 'per trovare questo fuori;) ci sono un paio di esempi in profondità là fuori, ma un "trucco" che ho trovato, se non si conosce la lunghezza è di chiamare MsiGetProperty con bufferLen = 0, che non riesce perché non c'è spazio sufficiente per memorizzare un valore ma riempie anche bufferLen con quanto spazio è necessario per memorizzare il valore effettivo. Chiamando nuovamente MsiGetProperty (assicurandosi di allocare value = TCHAR [bufferLen + 1] con +1 per creare spazio per un terminatore null) si restituirà il valore effettivo. – glenneroo
Sì, cch è la notazione ungherese di Microsoft per "Numero di caratteri", in contrapposizione a cb che è "Numero di byte". –
E sì, questo è un [comportamento documentato] (https://msdn.microsoft.com/en-us/library/windows/desktop/aa370134 (v = vs.85) aspx). Win32 e la shell erano abbastanza coerenti nel seguire questo schema. –