Exe Versions Infos ändern.

Für allgemeine Fragen zur Programmierung mit PureBasic.
Benutzeravatar
Knight_Rider_2000
Beiträge: 145
Registriert: 05.02.2007 20:46
Kontaktdaten:

Beitrag von Knight_Rider_2000 »

hast du auch schonmal die datei mit dem resHack geoeffnet?
bei mir sieht es so aus:

Code: Alles auswählen

1 VERSIONINFO
FILEVERSION 6,0,6000,16549
PRODUCTVERSION 6,0,6000,16549
FILEOS 0x40004
FILETYPE 0x1
{
BLOCK "StringFileInfo"
{
	BLOCK "040904B0"
	{
		VALUE "CompanyName", "Test Company"
		VALUE "FileDescription", "Test FileDescription"
		VALUE "FileVersion", "Test FileVersion"
		VALUE "ProductName", "Test Productname"
		VALUE "ProductVersion", "Test ProductVersion"
		VALUE "InternalName", ""
		VALUE "LegalCopyright", "Test LegalCopyright"
		VALUE "OriginalFilename", "Test OriginalFilename"
	}
}
PB 4.20,Blitz3D 1.98,Microsoft Visual Studio 2005 Professional, Microsoft Visual Studio 2008 Professional
Benutzeravatar
Knight_Rider_2000
Beiträge: 145
Registriert: 05.02.2007 20:46
Kontaktdaten:

Beitrag von Knight_Rider_2000 »

Und einige weitere Uebersetzungsfehler korrigiert:

Code: Alles auswählen

;Dies Ist der Hauptquellcode um bestehende Versionsinfos in Executables zu aendern.
;Copyright (C) 2007 by Christian Seysen and Felix Kuberjans(C++)
;Website: http://www.desaster-games.com
#RT_VERSION = 16

Structure VS_VERSIONINFO
  wLength.w
  wValueLength.w
  wType.w
  szKey.w[16]
  Padding1.w
  Value.VS_FIXEDFILEINFO
  Padding2.w
  Children.w
EndStructure

Structure VarFileInfo
  wLength.w; 
  wValueLength.w; 
  wType.w; 
  szKey.w[15]; 
  Padding.w; 
  Children.w; 
EndStructure

Structure StringFileInfo
 CompanyName.s
 Productname.s
 ProductVersion.s
 FileVersion.s
 FileDescription.s
 InternalName.s
 OriginalFilename.s
 LegalCopyright.s
 Website.s
EndStructure

Procedure.w MAKELANGID(p.w, s.w)
  ProcedureReturn (s << 10) | p
EndProcedure

Macro MAKEINTRESOURCE(I)
  (I)
EndMacro

Procedure ErrorHandler(Error.s)
 MessageRequester("ERROR",Error.s,#MB_OK | #MB_ICONEXCLAMATION)
EndProcedure

Procedure WriteStringFileInfo(pStringName.s,pValue.s,Buffer2.l,Coursor.l)
bPadding1.b
dwPadding2.l
dwStringNameLength = Len(pStringName);
dwValueLength = Len(pValue);
dwSize.w

If dwValueLength % 2 And Not dwStringNameLength % 2
 bPadding1 = #False;
Else
 bPadding1 = #True;
EndIf


dwSize=10+(dwStringNameLength + dwValueLength + bPadding1) * 2

dwPadding2 = dwSize % SizeOf(Long);

ReAllocateMemory(Buffer2,Coursor + dwSize + dwPadding2)

;1.laenge gesamt
PokeW(Buffer2+Coursor,dwSize) : Coursor=Coursor+2
;2.laenge inhaltslaenge
PokeW(Buffer2+Coursor,dwValueLength+1):Coursor=Coursor+2

;write a 1 ( 01 00)
PokeW(Buffer2+Coursor,1):Coursor=Coursor+2

;StringName
report1$=""
For StringName = 1 To dwStringNameLength
 PokeW(Buffer2+Coursor,Asc(Mid(pStringName,StringName,1))):Coursor=Coursor+2
 report1$=(report1$+Mid(pStringName,StringName,1))
Next
PokeW(Buffer2+Coursor,0):Coursor=Coursor+2

If (bPadding1)
 PokeW(Buffer2+Coursor,0):Coursor=Coursor+2
EndIf

;Value
report2$=""
For ValueName = 1 To dwValueLength
 PokeW(Buffer2+Coursor,Asc(Mid(pValue,ValueName,1))):Coursor=Coursor+2
 report2$=(report2$+Mid(pValue,ValueName,1))
Next
PokeW(Buffer2+Coursor,0):Coursor=Coursor+2

If (dwPadding2)
 ZeroMemory_(Buffer2+Coursor,dwPadding2)
 Coursor=Coursor+dwPadding2
EndIf
ProcedureReturn Coursor
EndProcedure

Procedure ChangeVersionData(pExe.s,*Information.StringFileInfo)

;Laden der Exe und kopieren der Resource in den Buffer1
hExe = LoadLibrary_(pExe); 
If hExe = #Null
    ErrorHandler("Could not load exe."); 
    Goto Except
EndIf
 
hRes = FindResource_(hExe, MAKEINTRESOURCE(#VS_VERSION_INFO), #RT_VERSION)
If hRes = #Null 
    ErrorHandler("Could not locate dialog box."); 
    Goto Except
EndIf 


hResLoad = LoadResource_(hExe, hRes); 
lsz=SizeofResource_(hExe, hRes)
If hResLoad = #Null
    ErrorHandler("Could not load dialog box."); 
    Goto Except
EndIf
 
lpResLock = LockResource_(hResLoad); 
If lpResLock = #Null 
    ErrorHandler("Could not lock dialog box."); 
    Goto Except
EndIf

Buffer1=AllocateMemory(lsz); pointer zu den resource Daten 
MoveMemory(lpResLock, Buffer1, lsz)

;Erstelle Buffer2 fuer unsere neue Resource
Buffer2=AllocateMemory(152)

;#####Create VERSIONINFO#####
;public class Versionsinfo{
;#define SizeOfResource
PokeW(Buffer2,MemorySize(Buffer2))
;kopiere vorhandenes Matterial
For Coursor=2 To 90 Step 2
 PokeW(Buffer2+Coursor,PeekW(Buffer1+Coursor))
Next Coursor
;einige Mathematische Vorkehrungen
;Laenge-160
PokeW(Buffer2+Coursor,(MemorySize(Buffer2)-160)) : Coursor=Coursor+2
;Kopiere
CopyMemory(Buffer1+Coursor,Buffer2+Coursor,34) : Coursor=Coursor+34
;Laenge-196
PokeW(Buffer2+Coursor,(MemorySize(Buffer2)-196)) : Coursor=Coursor+2
;Kopiere
CopyMemory(Buffer1+Coursor,Buffer2+Coursor,20) : Coursor=Coursor+20
;Null
PokeW(Buffer2+Coursor,0):Coursor=Coursor+2



;Schreibe die Informationen in die exe
Coursor=WriteStringFileInfo("CompanyName",*Information\CompanyName,Buffer2,Coursor)
Coursor=WriteStringFileInfo("FileDescription",*Information\FileDescription,Buffer2,Coursor)
Coursor=WriteStringFileInfo("FileVersion",*Information\FileVersion,Buffer2,Coursor)
Coursor=WriteStringFileInfo("InternalName",*Information\InternalName,Buffer2,Coursor)
Coursor=WriteStringFileInfo("LegalCopyright",*Information\LegalCopyright,Buffer2,Coursor)
Coursor=WriteStringFileInfo("OriginalFilename",*Information\OriginalFilename,Buffer2,Coursor)
Coursor=WriteStringFileInfo("ProductName",*Information\Productname,Buffer2,Coursor)
Coursor=WriteStringFileInfo("ProductVersion",*Information\ProductVersion,Buffer2,Coursor)

;
ReAllocateMemory(Buffer2,Coursor+68)
CopyMemory(Buffer1+lsz-68,Buffer2+Coursor,68):Coursor=Coursor+68;68


;Laenge korrigieren
PokeW(Buffer2,MemorySize(Buffer2))
PokeW(Buffer2+92,(MemorySize(Buffer2)-160))
PokeW(Buffer2+128,(MemorySize(Buffer2)-196))
;#####Finished neue Resource#####

FreeResource_(hResLoad)
GetModuleFileName_(hExe,pExe,#MAX_PATH)
FreeLibrary_(hExe)

;Beginne mit dem schreiben der Versionsinfos
hUpdateRes = BeginUpdateResource_(pExe, #False); 
If hUpdateRes = #Null
    ErrorHandler("Could not open file for writing."); 
    Goto Except
EndIf

If Not UpdateResource_(hUpdateRes, #RT_VERSION, MAKEINTRESOURCE(#VS_VERSION_INFO), MAKELANGID(#LANG_ENGLISH, #SUBLANG_ENGLISH_US), Buffer2, MemorySize(Buffer2))
    ErrorHandler("Could not add resource."); 
    Goto Except
EndIf


If Not  EndUpdateResource_(hUpdateRes, #False)
    ErrorHandler("Could not write changes to file."); 
    Goto Except
EndIf

;Wenn alles geklappt hat bekommen wir die Groesse in Bytes zurueck
ProcedureReturn Coursor

;Andernfalls -1
Except:
ProcedureReturn -1

EndProcedure

;Und nun testen wir es:

NewFileversion.StringFileInfo
NewFileversion\CompanyName="Test Company"
NewFileversion\Productname="Test Productname"
NewFileversion\ProductVersion="Test ProductVersion"
NewFileversion\FileVersion="Test FileVersion"
NewFileversion\FileDescription="Test FileDescription"
NewFileversion\InternalName="Test InternalName"
NewFileversion\OriginalFilename="Test OriginalFilename"
NewFileversion\LegalCopyright="Test LegalCopyright"
NewFileversion\Website="Test Website"

CopyFile("C:\WatchNow\test.exe","C:\Test.exe")

change=ChangeVersionData("C:\Test.exe",NewFileversion)
If change
 MessageRequester("Info","Suchsess")
Else
 MessageRequester("Info","Failed")
EndIf
Ressource Hacker sagt dazu:

Code: Alles auswählen

1 VERSIONINFO
FILEVERSION 6,0,6000,16549
PRODUCTVERSION 6,0,6000,16549
FILEOS 0x40004
FILETYPE 0x1
{
BLOCK "StringFileInfo"
{
	BLOCK "040904B0"
	{
		VALUE "CompanyName", "Test Company"
		VALUE "FileDescription", "Test FileDescription"
		VALUE "FileVersion", "Test FileVersion"
		VALUE "InternalName", "Test InternalName"
		VALUE "LegalCopyright", "Test LegalCopyright"
		VALUE "OriginalFilename", "Test OriginalFilename"
		VALUE "ProductName", "Test Productname"
		VALUE "ProductVersion", "Test ProductVersion"
	}
}

BLOCK "VarFileInfo"
{
	VALUE "Translation", 0x0409 0x04B0
}
}
Also mir sagt er damit dass es nun funzt
PB 4.20,Blitz3D 1.98,Microsoft Visual Studio 2005 Professional, Microsoft Visual Studio 2008 Professional
Benutzeravatar
X0r
Beiträge: 2770
Registriert: 15.03.2007 21:47
Kontaktdaten:

Beitrag von X0r »

Dir kann er viel sagen. Was sagt dir aber die Exe?
Benutzeravatar
Knight_Rider_2000
Beiträge: 145
Registriert: 05.02.2007 20:46
Kontaktdaten:

Beitrag von Knight_Rider_2000 »

X0r hat geschrieben:Dir kann er viel sagen. Was sagt dir aber die Exe?
Die tuts sowieso
PB 4.20,Blitz3D 1.98,Microsoft Visual Studio 2005 Professional, Microsoft Visual Studio 2008 Professional
kevv
Beiträge: 31
Registriert: 28.11.2010 15:52

Re: Exe Versions Infos ändern.

Beitrag von kevv »

Die FILEVERSION wird nicht verändert
Weis einer wieso?
Antworten