Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Werkzeuge (https://www.delphipraxis.net/63-sonstige-werkzeuge/)
-   -   Code für Inno-Setup gesucht (https://www.delphipraxis.net/135534-code-fuer-inno-setup-gesucht.html)

Rued 12. Jun 2009 16:47


Code für Inno-Setup gesucht
 
Hallo!

Kann mir jemand die Funktion für das Auslesen der Seriennummer der Festplatte ('C') für den Code-Abschnitt im Inno-Setup geben?

Gruß

Rüd

mkinzler 12. Jun 2009 17:14

Re: Code für Inno-Setup gesucht
 
Ihm Zweifel kann man immer externe Programme Starten lasse und dessen Rückgabe auswerten

DeddyH 12. Jun 2009 17:19

Re: Code für Inno-Setup gesucht
 
Im Bezug auf Inno habe ich die Frage evtl. nicht richtig verstanden, aber vielleicht suchst Du MSDN-Library durchsuchenGetVolumeInformation.

mkinzler 12. Jun 2009 17:23

Re: Code für Inno-Setup gesucht
 
Zitat:

Im Bezug auf Inno habe ich die Frage evtl. nicht richtig verstanden
Ich vermute er sucht (Script-)Code.

DeddyH 12. Jun 2009 17:27

Re: Code für Inno-Setup gesucht
 
Ich hatte sowas befürchtet :stupid:

mkinzler 12. Jun 2009 17:28

Re: Code für Inno-Setup gesucht
 
@Rued: Wenn du unsere beiden Antworten kombinierst, sollte es gehen

Rued 12. Jun 2009 18:27

Re: Code für Inno-Setup gesucht
 
Zitat:

Zitat von mkinzler
@Rued: Wenn du unsere beiden Antworten kombinierst, sollte es gehen

Hallo Markus!

Die Funktion GetVolumeInformation nutze ich in meinen Programmen, erfordert aber die unit Windows, die offensichtlich nicht in ein Inno-Setup eingebunden werden kann. Ich hatte gehofft, es gibt eine analoge Funktion in Inno.

Ein externes Programm müsste zumindest entpackt werden, um gestartet werden zu können, ich will das Setup aber abbrechen, wenn mir die ausgelesene Seriennummer "nicht gefällt".

Gruß

Rüd

mkinzler 12. Jun 2009 18:33

Re: Code für Inno-Setup gesucht
 
Man kann in InnoSetup temporär Programme entpacken, diese vom Setup ausführen lassen und deren Rückgabe auswerten
http://www.jrsoftware.org/iskb.php?custom

Rued 12. Jun 2009 18:52

Re: Code für Inno-Setup gesucht
 
Zitat:

Zitat von mkinzler
Man kann in InnoSetup temporär Programme entpacken, diese vom Setup ausführen lassen und deren Rückgabe auswerten
http://www.jrsoftware.org/iskb.php?custom

Darf ich das verlinkte Beispiel so verstehen, dass ein Inno-Setup mehrere Files- und Run-sections haben darf, die in der Reihenfolge abgearbeitet werden, wie sie durch das Script vorgegeben wird?

Gruß

Rüd

mkinzler 12. Jun 2009 18:55

Re: Code für Inno-Setup gesucht
 
Ja. Und wenn sie nach {tmp} entpackt werden, werden sie automatisch wieder gelöscht

Rued 12. Jun 2009 19:09

Re: Code für Inno-Setup gesucht
 
Zitat:

Zitat von mkinzler
Ja. Und wenn sie nach {tmp} entpackt werden, werden sie automatisch wieder gelöscht

Klingt nicht schlecht, ich versuche mich `mal. Hab´ erst einmal herzlichen Dank.

Schönes Wochenende wünscht

Rüd

Codewalker 12. Jun 2009 19:37

Re: Code für Inno-Setup gesucht
 
InnoSetup kann doch auch Funktionen aus DLLs importieren und GetVolumeInformation sollte sich doch problemlos so importieren lassen (aus der Kernel32.dll. Genaue Infos sind ja in der Windows.pas drin). Benötigte Konstanten kann man da auch schnell deklarieren - dann spart man sich temporäre Programme und diverse Umwege

Rued 12. Jun 2009 20:15

Re: Code für Inno-Setup gesucht
 
Zitat:

Zitat von Codewalker
InnoSetup kann doch auch Funktionen aus DLLs importieren und GetVolumeInformation sollte sich doch problemlos so importieren lassen (aus der Kernel32.dll. Genaue Infos sind ja in der Windows.pas drin). Benötigte Konstanten kann man da auch schnell deklarieren - dann spart man sich temporäre Programme und diverse Umwege

Wenn es eine elegantere Methode gibt, würde ich Dich bitten, mir noch etwas zu helfen. In der windows.pas habe ich das gefunden:

Delphi-Quellcode:
function GetVolumeInformation(lpRootPathName: PChar;
  lpVolumeNameBuffer: PChar; nVolumeNameSize: DWORD; lpVolumeSerialNumber: PDWORD;
  var lpMaximumComponentLength, lpFileSystemFlags: DWORD;
  lpFileSystemNameBuffer: PChar; nFileSystemNameSize: DWORD): BOOL; stdcall;
{$EXTERNALSYM GetVolumeInformation}
In meinen Programmen habe ich mit
Delphi-Quellcode:
if GetvolumeInformation(pchar(drive + ':\'), nil, 0, id, dwx, dwy, nil, 0) then result := copy(IntToStr(ID^),1,8)
gearbeitet, da ich nur die ersten acht Ziffern benötige.

Wie komme ich über den Import an den String?

Gruß

Rüd

[edit=mkinzler]Delphi-Tags eingefügt Mfg, mkinzler[/edit]

Reinhold 12. Jun 2009 21:17

Re: Code für Inno-Setup gesucht
 
Schau mal hier Deutsches InnoSetup Forum.
Hier findest Du bestimmt eine Lösung.

Gruß Reinhold

Rued 12. Jun 2009 21:22

Re: Code für Inno-Setup gesucht
 
Zitat:

Zitat von Reinhold
Schau mal hier Deutsches InnoSetup Forum.
Hier findest Du bestimmt eine Lösung.

Gruß Reinhold

Kenne ich, vergeblich gesucht.

Korrektur: habe jetzt noch einmal spezifisch gesucht, vielleicht geht was...
Gruß

Rüd

Rued 13. Jun 2009 15:39

Re: Code für Inno-Setup gesucht
 
Brauche doch noch Hilfe:

Im [Code] starte ich mit
Delphi-Quellcode:
function GetVolumeInformation: BOOL;
external 'GetVolumeInformation@files:Kernel32.dll stdcall';
Dann baue ich eine Funktion die auf GetVolumeInformation zugreift, wenn ich das richtig verstehe, also etwa

Delphi-Quellcode:
function FPSeriennummer(FP: string): string;
var
ID: PDWord;
dwx, dwy: DWord;
begin
new(ID);
  If GetVolumeInformation(pchar(FP+ ':\'), nil, 0, id, dwx, dwy, nil, 0)
          then result := copy(IntToStr(ID^),1,8);
end;
Inno kennt PDWord und new nicht und moniert die unpassende Anzahl von Parametern.

Kann mir jemand helfen?

Gruß

Rüd


Alle Zeitangaben in WEZ +1. Es ist jetzt 21:10 Uhr.

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz