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

Datei - ProductVersion ermitteln


1 reply to this topic

ICE3D

ICE3D
  • Members
  • 12 posts

Posted 03 June 2005 - 16:27

Hallo smile.gif

Ich hab diesen Thread gefunden: http://forum.install...showtopic=12215

Selbiges suche ich für IS6.
Die Funktionen, die ich hier gefudnen habe, funktioniert leider nicht wie gewünscht:
http://www.installsi...en/isp_comp.htm (Read ProductVersion from File)

VwrGetProductVersion liefert die selbe Information wie VerGetFileVersion.

In meinem Fall brauche in die Produkt-Version einer dll.
Diese hat als Dateiversion 9.2.0.0
und als Produktversion 9.2.0.4.8

user posted image

Wie bereits erwähnt liefern beide Funktionen immer 9.2.0.0 zurück.

Kann mir da jemand weiterhelfen?

tia
..:: there is no place like 127.0.0.1 ::..

ICE3D

ICE3D
  • Members
  • 12 posts

Posted 15 June 2005 - 16:54

Mittlerweile hab ich das Problem selber lösen können.

Ich hab das Beispiel-Script (siehe oberer Post) etwas abgeändert.
CODE
function VerGetProductVersion(sFile, sProductVersion)
LONG fressize, freshnd, fiiaddr, fiilen, di;
POINTER verbuf;        
STRING sVersion1, sVersion2, sVersion3, sVersion4, sVersion5, sVersion6;
LONG    lMaxBuf;
begin

 UseDLL(WINSYSDIR ^ "Version.dll");
 UseDLL(WINSYSDIR ^ "msvcrt.dll");  
                         
 //
 // MAX_BUF must now be passed to malloc as a variable.
 //
 lMaxBuf   = MAX_BUF;
 // get memory chunk
 verbuf = malloc(lMaxBuf);    
 if (verbuf != 0) then
   // Determine if version information is present, and
   // if so how large a buffer is needed to hold it.
   fressize = GetFileVersionInfoSizeA(sFile, freshnd);

   // Version info is unlikely to ever be greater than MAX_BUF
   // but check anyway. If it was larger than MAX_BUF, we would
   // need to allocate a huge buffer instead.  Note, we
   // are only using an approximation to MAX_BUF here to take
   // into account the InstallShield string overhead.
   if (fressize > MAX_BUF) then
     fressize = MAX_BUF;
   endif;

   // Load the string with the version information
   di = GetFileVersionInfoA(sFile, freshnd, fressize, verbuf);

   if (di > 0) then
   
     di = VerQueryValueA(verbuf, "\\StringFileInfo\\040904E4\\ProductVersion", fiiaddr, fiilen);
 
     if (di > 0) then                          

 Sprintf(sProductVersion, "%s", fiiaddr);

     endif;

   endif;

   // Now free the allocated memory.
   free(verbuf);
 endif;
 
 UnUseDLL(WINSYSDIR ^ "msvcrt.dll");
 UnUseDLL(WINSYSDIR ^ "Version.dll");  
 

end;


Die Code-Page und die Sprache hab ich hardcoded drinnen, da ich zu 100% weiß, dass auf den Rechnern wo das Setup ausgeführt wird, diese Version installiert ist.

Wenn dies nicht der Fall wäre, müsste man die CodePages und Sprachen in einer Schleife durchgehen.
..:: there is no place like 127.0.0.1 ::..