Jump to content


This is a ready-only archive of the InstallSite Forum. You cannot post any new content here. / Dies ist ein Archiv des InstallSite Forums. Hier können keine neuen Beiträge veröffentlicht werden.
Photo

MsiGetProperty -> "ProductName"


2 replies to this topic

bernard

bernard
  • Full Members
  • 127 posts

Posted 23 April 2012 - 10:50

Habe InstallShield 2012 Professional Edition, Version 18 + SP1.

Ich habe Basic MSI Project und eine CA(Custom Action) die eine InstallSkript-Funktion aufruft.
Da benutze ich die Funktion "MsiGetProperty" um auf Eigenschaften der MSI-Installation zuzugreifen.

Ich habe folgendes Problem:

Property -> "ProductName" hat die Groesse 40 Byte!
svProductName wird 38 Byte nur zeigen!

Hier ist die Funktion meines Skriptes:

function dltWorkProduct_GUID(hMSI)
string svProductGuid[128], svProductName[128];
number nvCount;
begin
RegDBSetDefaultRoot( HKEY_USER_SELECTABLE );
nvCount = 127;
MsiGetProperty(hMSI, "ProductCode",svProductGuid, nvCount);
MsiGetProperty(hMSI, "ProductName",svProductName, nvCount);
MessageBox("MsiGetProperty: ProductName = " + svProductName ,INFORMATION);
// meine_Function(DLTPRODUCT_GUID, svProductName, svProductGuid, DLTPROD_INI);
end; // function dltWorkProduct_GUID(hMSI)

CA hat:
- "In-Script Execution" = Immediate Execution
- "Install Exec Sequence" = After InstallFinalize

Frage:
Darf man Property -> ProductName nicht Groesse als 38 Byte nutzen?
Stimmt es?

Danke im Voraus


Stefan Krueger

Stefan Krueger

    InstallSite.org

  • Administrators
  • 13,269 posts

Posted 24 April 2012 - 08:42

Du musst nvCount zurücksetzen zwischen den beiden MsiGetProperty-Aufrufen.

MsiGetProperty(hMSI, "ProductCode",svProductGuid, nvCount);
setzt nvCount auf die Länge des zurückgelieferten Wertes. Der ProductCode ist eine GUID und die hat 38 Zeichen.

Du übergibts also jetzt nvCount=38 an diesen Aufruf:
MsiGetProperty(hMSI, "ProductName",svProductName, nvCount);
d.h. du forderst ausdrücklich an, dass nur 38 Zeichenzurückgeliefert werden.

Füge nvCount=127; zwischen die beiden Aufrufe ein.

bernard

bernard
  • Full Members
  • 127 posts

Posted 26 April 2012 - 06:23

QUOTE
Füge nvCount=127; zwischen die beiden Aufrufe ein.


Vielen Dank für den Tipp.
Jetzt funktioniert richtig!