2017-12-14 10 views
0

Ich versuche, Daten von der CustomActionData-Eigenschaft in einer C++ - DLL abzurufen, aber sie ist während der verzögerten Sequenz immer leer. Wenn ich genau denselben Code in einer CA verwende, der während der UI-Sequenz ausgeführt wird, funktioniert alles super.Abrufen von CustomActionData in verzögerter benutzerdefinierter Aktion

 UINT iCASize = 0; 
     UINT uiStat = MsiGetProperty(hInstall, TEXT("CustomActionData"), TEXT(""), &iCASize); 
     if (uiStat == ERROR_MORE_DATA) 
     { 
      // this means there are data to read. Allocate array for all data and read it (+1 for null termination) 
      pCustData = new WCHAR[iCASize + 1]; 
      uiStat = MsiGetProperty(hInstall, TEXT("CustomActionData"), pCustData, &iCASize); 
     } 

Jeder von euch da draußen hat eine Idee, was könnte falsch sein?

Antwort

0

Entweder ist etwas falsch mit diesem C++ - Code (ich habe nicht in 20 Jahren C++ getan) oder Sie setzen wahrscheinlich die CustomActionData nicht richtig.

Sie müssen eine benutzerdefinierte Aktion im unmittelbaren Kontext vor der verzögerten benutzerdefinierten Aktion planen. Die Eigenschaft, die festgelegt wird, ist der Name der zurückgestellten CA.

Custom Name: SetSomething Eigentum: Etwas = Wert: FOO (nicht Custom = FOO)

Custom Name: Etwas MsiGetProperty (... "Custom" ...);

+0

Vielen Dank! Ich wusste nicht, dass ich die Eigenschaft [Name der benutzerdefinierten Aktion] festlegen musste, um die Daten in CustomActionData abzurufen. Jetzt funktioniert es! –

+0

Es ist erstaunlich, dass du das mit meiner schlechten Formatierung bekommen hast. Es tut mir leid, es war sehr früh in der Früh und ich hatte meinen Kaffee noch nicht getrunken. –

Verwandte Themen