Gibt es eine Möglichkeit, eine neue GUID aus dem Inno-Setup-Skript zu generieren?Wie generiere ich eine neue GUID in Inno Setup?
Antwort
diese Gefunden auf ınnosetup Newsgroup-Archiv:
http://news.jrsoftware.org/news/innosetup/msg76234.html
ich es nicht getestet haben.
[Code]
type
TGUID = record
D1: LongWord;
D2: Word;
D3: Word;
D4: array[0..7] of Byte;
end;
function CoCreateGuid(var Guid:TGuid):integer;
external '[email protected] stdcall';
function inttohex(l:longword; digits:integer):string;
var hexchars:string;
begin
hexchars:='ABCDEF';
setlength(result,digits);
while (digits>0) do begin
result[digits]:=hexchars[l mod 16+1];
l:=l div 16;
digits:=digits-1;
end;
end;
function GetGuid(dummy:string):string;
var Guid:TGuid;
begin
if CoCreateGuid(Guid)=0 then begin
result:='{'+IntToHex(Guid.D1,8)+'-'+
IntToHex(Guid.D2,4)+'-'+
IntToHex(Guid.D3,4)+'-'+
IntToHex(Guid.D4[0],2)+IntToHex(Guid.D4[1],2)+'-'+
IntToHex(Guid.D4[2],2)+IntToHex(Guid.D4[3],2)+
IntToHex(Guid.D4[4],2)+IntToHex(Guid.D4[5],2)+
IntToHex(Guid.D4[6],2)+IntToHex(Guid.D4[7],2)+
'}';
end else
result:='{00000000-0000-0000-0000-000000000000}';
end;
function InitializeSetup(): Boolean;
begin
MsgBox(GetGuid(''), mbInformation, MB_OK);
Result := False;
end;
Sie können dies tun, indem Sie die Windows-API-Funktion CoCreateGuid (in "OLE32.dll") aufrufen, die Sie in einem [Code] -Abschnitt in Ihrem Skript deklarieren. Sorry, ich habe Inno Setup seit einiger Zeit nicht mehr verwendet, daher weiß ich nicht genau, wie ich das machen soll. Um zu helfen, hier ist ein Beispiel API-Deklaration für die GetWindow() Funktion:
Function GetWindow (HWND: Longint; uCmd: cardinal): Longint;
external '[email protected] stdcall';
Und hier ist ein Link zu einer VB Probe für CoCreateGuid mit:
http://support.microsoft.com/kb/176790
Irgendwo in all dies ist Ihre Antworten.
giorgians Antwort zeigt, wie man das im Inno Setup macht. – MusiGenesis
Hier ist eine etwas sauberere Umsetzung FormatGuid
, ohne unnötige Hex-Formatierung-Funktion (was haben wir Format
für ?!):
function FormatGuid(Guid:TGuid):string;
begin
result:=Format('%.8x-%.4x-%.4x-%.2x-%.2x-%.2x-%.2x-%.2x-%.2x-%.2x-%.2x', [Guid.D1, Guid.D2, Guid.D3, Guid.D4[0], Guid.D4[1], Guid.D4[2], Guid.D4[3], Guid.D4[4], Guid.D4[5], Guid.D4[6], Guid.D4[7]]);
end;
Sie noch TGuid
definieren müssen und importieren CoCreateGuid
als in den anderen Antworten:
type
TGuid = record
D1: LongWord;
D2: Word;
D3: Word;
D4: array[0..7] of Byte;
end;
function CoCreateGuid(var Guid:TGuid):integer;
external '[email protected] stdcall';
Leider hat das Ergebnis der FormatGuid-Funktion in dieser Antwort keine Zeichenfolgedarstellung einer GUID in einem gültigen Format erzeugt. Stattdessen wurde eine Zeichenkette wie folgt erzeugt: XXXXXXXX-XXXX-XXXX-XX-XX-XX-XX-XX-XX-XX-XX Die Validierung erfolgte über http://guid.us/Test/GUID –
An alternatives Zeichenfolgenformat wird angezeigt unter: http://docs.embarcadero.com/products/rad_studio/delphiAndcpp2009/HelpUpdate2/EN/html/delphivclwin32/System_TGUID.html Dieses Format scheint gültige GUIDs gemäß http: // zu erzeugen. guid.us/Test/GUID –
Ich war diese Lösung für eine Weile (mit 5.5.0 (a) und 5.5. 1 (a)).
Allerdings, wenn ich auf 5.5.2 (u) aktualisiert - meine Build-Skripts fehlgeschlagen wegen eines doppelten Typs Fehler: 'TGUID'.
Um es zu beheben, musste ich entfernen:
type
TGUID = record
D1: LongWord;
D2: Word;
D3: Word;
D4: array[0..7] of Byte;
end;
Dies ist nur auf der Unicode-Version geschieht - Was bedeutet: 5.5.2 (u) in GUID-Typ eine gebaut hat.
- 1. Inno Setup benutzerdefinierte Seite
- 2. Upgrade-Code entspricht in Inno-Setup
- 3. Binärdatei in Inno-Setup schreiben
- 4. Inno Setup: Wie sehe ich die Ausgabe (Übersetzung) des Inno Setup Preprocessors?
- 5. Länderbasierter Download in Inno Setup
- 6. Inno Setup: OnHover-Ereignis
- 7. Inno Setup-Registrierung
- 8. Wie man cmd.exe ausgeblendet in Inno-Setup
- 9. Inno-Setup: Benutzerdefinierte Klassen
- 10. Inno Setup - UrlCreateFromPath
- 11. Inno Setup Standardinstallationsordner ändern
- 12. msi Rückkehrcodes in Inno-Setup
- 13. Inno-Setup Semicolon fehlt
- 14. Wie teilt man eine Zeichenkette in Inno Setup
- 15. Inno Setup deinstallieren Fortschrittsbalken Änderungsereignis
- 16. Inno-Setup: Deinstallation ohne Administratorberechtigung
- 17. Inno Setup Ungültiges Bitmap-Bild
- 18. INNO-Setup-Treiber bereits installiert
- 19. Inno Setup mit drei Zielordnern
- 20. Inno Setup - Java-Umgebungsvariable einstellen
- 21. Wie Inno Setup Display Deinstallation Eintrag
- 22. Wie Inno Setup Fehler EndUpdateResource fehlgeschlagen (110)
- 23. Wie erhalte ich die lokale Zeit im Inno-Setup?
- 24. Wie "Ausführen als Administrator" für eine Datei mit Inno-Setup
- 25. Wie Inno Setup verwenden, um eine Datenbank mit SQL-Skript
- 26. Größere "Select Components" Seite in Inno Setup
- 27. Inno Setup: Wie installiere ich das Installationsprogramm "Als Administrator ausführen"?
- 28. Wie kann ich Inno Setup veranlassen, leere Verzeichnisse zu ignorieren?
- 29. Boolean in String mit Inno-Setup konvertieren
- 30. Wie signiere ich die Inno Setup generierte Deinstallationsdatei?
Das ist, was ich gesucht habe. – MusiGenesis
Es gibt auch einen anderen Win32-API-Aufruf, der die rohe GUID von CoCreateGuid() in eine Zeichenfolgendarstellung im Format {00000000-0000-0000-0000-000000000000} konvertiert, was die obige Funktion stark vereinfachen würde, aber ich erinnere mich nicht wie es heißt. – MusiGenesis
StringFromCLSID ist der zweite win32-API-Aufruf, der dafür verwendet wird, auch von ole32.dll. – MusiGenesis