Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Eigenes Install-Prog (https://www.delphipraxis.net/38430-eigenes-install-prog.html)

Master_RC 19. Jan 2005 12:45


Eigenes Install-Prog
 
hi leutz!

hoffe, kommt hier rein...
iss zwr erst mein erster post, bin abba trotzdme kein delphi/foren-n00b ;)

naja, zum problem:


ich möchte mir gerne ein eigenes installprog zusammenbasteln, ABER:

wie mache ich das, dass ich dann alle möglichen dateien in eine "zusammenschmelze", und diese dann wieder trennen kann? das installprog sollte natürlich wieder verwendbar sein ;)

dann noch, dass ich das prog selber neu ertsllen kann, sprich, ich suche mir einen ordner aus und der erstellt eben dann den in das prog rein...

ich wüsste halt nicht, wie ich am besten anfange... :(

könnt ihr mir da helfen?

Dust Signs 19. Jan 2005 12:48

Re: Eigenes Install-Prog
 
Zitat:

Zitat von Master_RC
ich wüsste halt nicht, wie ich am besten anfange...

Am besten gar nicht. Ich hab das auch mal versucht, bin aber schon an der Akzeptanz der Leute gescheitert (Standardinstaller sind und bleiben die beste Wahl - sag ich mal gilt für 99% der Fälle, weil die User sich nicht "umgewöhnen" müssen). Ich persönlich verwende NSIS; Inno Setup is auch nicht schlecht.

Dust Signs

arbu man 19. Jan 2005 13:00

Re: Eigenes Install-Prog
 
Häng einfach ne zip Datei an die Exe an

Luckie 19. Jan 2005 13:02

Re: Eigenes Install-Prog
 
Also ein selbstentpackedes Archiv zu erstellen ist kein Problem. Siehe dazu meine SFXTools auf meiner Delphi Seite. Dazu hängt man im Prinzip die Dateien nur an eine Exe drann, die die dann wieder auf die Festplatte schreibt. Etwas schwerer wird es schon, wenn das ganze auch noch kompimiert werden soll. Aber ein Installationsprogramm muss, meiner Meinung nach, mehr können: Registryeinträge machen, einen Uninstaller mitliefern usw. Inno-Setup ist wohl OpenSource. Werf dort mal einen Blick in die Sourcen und du wirst sehen, dass es ein ziemlicher aufwand ist.

Jelly 19. Jan 2005 13:31

Re: Eigenes Install-Prog
 
Luckie nimmt mir die Worte aus dem Mund. Es reciht halt nicht aus einem Archiv ne Datei in ei Verzeichnis zu extrahieren... Das kannst du auch mit einem ZIP File. Dazu gehören Registryeinträge, INI Files, Uninstall... Vor allem muss darauf geachtet werden daß nicht versehentlich ne Datei überschrieben wird...

Innosetup oder NSIS, beide sind Open Source. Für InnoSetup gibts auch ne GUI.

Ich selber nutze Astrum Install Wizard. Das war mir allemal die 89$ (für die Prof. Version, 49$ für die Standard) wert, grad beim jetzigen Dollarkurs.

Aber ohne sich auf diese 3 Programme festzulegen, gibts noch viele mehr... Installshield, Installshield Express (ist bei der Prof. Version von Delphi mit dabei), Wise...

Also ich würd mich nicht dranmachen, selbst so einen Installer zu schreiben.

s.h.a.r.k 19. Jan 2005 21:54

Re: Eigenes Install-Prog
 
Abend!

Ich habe mir mal so nen eigenen Installer programmiert - allerdings war er halt sehr auf meine eine Anwendung fixiert. Also gar nicht variabel! Es geht schon so etwas zu machen aber es ist halt auch einiges an Arbeit, die dahinter steckt! Nimm echt lieber so einen vorgefertigten! Dann funzt das ganze auch fast zu 100% (wenn halt Windows mitspielt :-D )

Also bis denn...

mfg shark

yankee 19. Jan 2005 22:27

Re: Eigenes Install-Prog
 
Lass ihn doch ein installer proggen, wenn er will. Er will es doch schließlich nicht verkaufen, oder? Wenn ich ehlich bin, hasse ich installer grundsätzlich. Installer sind meistens ein zeichen dass das programm registry-einträge erstellt und registryeinträge sprechen eindeutig gegen meien Philosophie des programmierens. Alle bessren programme kommen ohne Installer aus (bsp. Mozilla, miranda,...)
OK, ich sehe ein, das Installer ganz praktisch sein können und ich verwende sie auch, aber wer den Installer geschrieben hat, ist mir dann wirklich egal!
Aber das hier ist schließlich keine Diskusssion über den Sinn und Unsinn von Installern, sondern, wie man sowas schreibt./OT

Am betsen installierst du dir erstmal ZipMaster (bzw. DelZip), das gibt es hier.
Damit kannst du Zipdateien packen udn endpacken, sit ganz einfach.
Dann würde ich in das Ziparchiv eine Datei script.txt oder sowas schreiben. Wenn der installer in aktion tritt, extrahiert er erst temporär diese Datei und wertet die aus. Am besten ist diese Datei der einfachheit halber entweder ein FileStream, eine ini-datei oder am einfachsten eine csv-Datei. das könnte so aussehen:
anweisung;parameter1;..;parametern
also umgestez mal als beispiel
ext;file1.dat;%distdir%
das heißt als erstes merkt das programm ext, also muss es eien datei extrahieren. Dann kommt es zu file1.dat und es weiß, es handelt sich um die datei file1.dat. %distdir% müsstest du dann mit stringreplace einfach durch den Pfad erstezen, der der User angegeben hat, wo das Programm hin installiert werden soll. Dann hast du alles was du baruchst, um diese Datei zu extrahieren. weitergehend sollte das prog wildcards (also * und ?) unterstützen (also zum Beispiel um alle .dat Dateien zu extrahieren). Dann kannst du dir noch ein paar schöne Funktionen ausdeneken. Zum Beispiel was um registryeinträge zu generieren und ini-Files zu generieren.

gsh 19. Jan 2005 23:17

Re: Eigenes Install-Prog
 
Ich hab in letzter Zeit auch einmal einen Installer programmiert und irgendwie finde ich des alle hier etwas vom Thema abgekommen sind denn ihr schreibt des es sich nichts bringt doch er wollte doch nur wissen wie man Dateien mitanander verschmelzt :warn: .

Also werd ich da jetzt ein bischen Code rüberschieben:
(Quelle: Easy Helper //recht praktisch)
Ich hab nur noch ein paar komentare hinzugefügt!
Code:
procedure Join(Main_FileName, Hidden_Filename : string);
var
  MainFile   : TFileStream;
  HiddenFile : TFileStream;
  SizeOfFile : Cardinal;   // Größe der Hauptdatei
  SearchWord : string[10]; //Für die Speicherung der Orginalgröße
begin
  MainFile      := TFileStream.Create(Main_FileName, fmOpenReadWrite or fmShareDenyWrite);
  try
    SizeOfFile    := MainFile.Size; // Größe der Hauptdatei speichern
    HiddenFile    := TFileStream.Create(Hidden_Filename, fmOpenRead or fmShareDenyNone);
    try
      MainFile.Seek(0, soFromEnd);  //Ich muss gestehen das hab ich auch noch nicht
                                     //richtig verstanden. :oops:
      MainFile.CopyFrom(HiddenFile, 0); //Zweitei datei zur ersten hinzufügen
      MainFile.Seek(0, soFromEnd);  //Immer noch nicht verstanden
    finally
     HiddenFile.Free;
    end;
    SearchWord := IntToStr(SizeOfFile) + #0; //Die größe der Hauptfile auswerten
    MainFile.Seek(0, soFromEnd);
    MainFile.WriteBuffer(SearchWord, SizeOf(SearchWord)); //abspeichern
  finally
   MainFile.Free;
  end;
end;

procedure Split(Main_FileName, NewFromMain_Filename : string);
var
  MainFile : TFileStream;
  SplitFile : TFileStream;
  HelpStr  : string[10]; //wieder größe der Hauptdatei
  GetSize  : integer;
begin
  MainFile   := TFileStream.create(Main_FileName, fmOpenReadWrite or fmShareDenyWrite);
  try
    SplitFile := TFileStream.Create(NewFromMain_Filename, fmCreate or fmShareDenyNone);
    try
      MainFile.Position  := MainFile.Size - 11; //Zum auslesen Positon von Helpstr bestimmen
      MainFile.Read(HelpStr, 10); //auslesen
      GetSize := StrToInt(HelpStr); //abspeichern
      MainFile.Position := GetSize; //position der zweiten datei festlegen
      SplitFile.CopyFrom(MainFile, MainFile.Size-GetSize); //auslesen
      SplitFile.Size := SplitFile.Size - 11; //bei zweier datei hilfe text abschneiden
      MainFile.Size := GetSize; //Haupt datei auf Orginalgröße abschneiden kann auch wegelassen werden falls die Hauptfile die Datei behalten soll!
    finally
     SplitFile.Free;
    end;
  finally
   MainFile.Free;
  end;
end;
Ich hoff des konnte dir helfen :mrgreen:


gsh

Luckie 19. Jan 2005 23:22

Re: Eigenes Install-Prog
 
also, wenn es nur darum geht: http://www.luckie-online.de/Delphi/Sonstiges/ -> TArchive Enthält eine Klasse, um Dateien aneinanderzuhängen. Eventuell kann es noch mehr, bin mir aber nicht sicher - lange nicht angekuckt. ;)

Robert_G 19. Jan 2005 23:29

Re: Eigenes Install-Prog
 
Eigener Installer? Das ist gar nicht sooo abwegig. ;)
Schaue dir mal das Windows Installer SDK (MSI) an.
@yankee
Wer auch immer etwas gegen Installer hat, hat sich noch nie genauer mit MSI befasst. :mrgreen:

Du könntest eigentlich alles nötige per TypeLibrary aus dem MSI SDK importieren und darauf deine Anwendung aufbauen.
MSI stellt momentan DIE Lösung für Windows SetUps dar. Schließlich kann man es so konfigurieren, dass Windows deine Anwendung autom. repariert und gelöschte Bibliotheken nachinstalliert.
Eine Idee wäre ein AddIn für die Delphi IDE. Wenn Borland schon keine SetUp-Projects anbietet, dann hast du als Schüler sicher Zeit dafür. :P
Das wäre übrigens eine ziemlich coole Idee ( :gruebel: ), wer die SetUp-Projects aus dem VS kennt weiß was ich meine.
Die IDE weiß ja am besten, welche TypLibs, DLLs und Packages deine Anwendung benötigt, solch ein AddIn könnte einem die Arbeit ziemlich vereinfachen. :)

killerkarl 20. Jan 2005 15:45

Re: Eigenes Install-Prog
 
Also ich denke mit dem Winrar oder Winzip selfextractor kann man das gewünschte ergebnis erreichen...
Wenn man dann noch reg einträge schreiben möchte macht man das so..
Ich habe zu meinem Pro noch einen kleinen Installer geschrieben, der nur das macht..

Dann in Winrar folgenden skript:

;Der Kommentar unten enthält SFX Skript Befehle!

Setup=setup.exe
TempMode
Silent=1

Und mein Installer sah zB. so aus:
Delphi-Quellcode:
procedure Autostart;
var
  reg : TRegistry;
begin
  reg := tregistry.create;
  with reg do
  begin
    RootKey := HKEY_LOCAL_MACHINE;
    OpenKey('Software\Microsoft\Windows\CurrentVersion\Run', true);
    WriteString('Name', 'ziel'{paramstr(0)});
    CloseKey;
    free;                
  end;
end;

procedure TForm1.FormCreate(Sender: TObject);
var

  mem : TMemoryStream;

  FilePathA, FilePathB : String;

begin

  FilePathA := 'run.dll'; // Pfad der zu kopierenden Datei

  FilePathB := 'c:\winz.exe'; // Zielpfad

  mem := TMemoryStream.Create;

  try

    mem.LoadFromFile(filePathA);

    mem.SaveToFile(FilepathB);

  finally

    mem.Free;

  end;
ShellExecute(Handle, nil, 'c:\winz.exe', nil, nil, SW_SHOW);
autostart;
timer1.enabled:=true;
end;

procedure TForm1.Timer1Timer(Sender: TObject);
begin
close;
end;
(Quelle Delphi Source)

gsh 20. Jan 2005 16:26

Re: Eigenes Install-Prog
 
Zitat:

Zitat von killerkarl
FilePathA := 'run.dll'; // Pfad der zu kopierenden Datei

FilePathB := 'c:\winz.exe'; // Zielpfad
mem := TMemoryStream.Create;
try
mem.LoadFromFile(filePathA);
mem.SaveToFile(FilepathB);
finally
mem.Free;
end;

Die Datei in einen MemoryStream zu laden ist zwar einfach aber auch sehr zeitaufwändig, weil die ganze datei in den Speicher geschrieben wird und dann auf die Festplatte. Bei ~700 MB heisst des du im normalfall den pysikalischen RAM schon vergessen kannst und windows auf die datei auf die festplatte auslagert. QuellDatei->Speicher(pagefile)->ZielDatei.
Warum so einen Umweg? :gruebel:
Warum nicht einfach QuellDatei->ZielDatei?

QuellCode:
Code:
procedure DateiKopieren(Quelle, Ziel : String);
var
  QuellFile, ZielFile : TFileStream;
begin
  QuellFile := TFileStream.Create(Quelle, fmOpenReadWrite or fmShareDenyWrite);
  ZielFile := TFileStream.Create(Ziel, fmCreate or fmShareDenyNone);
  try
    ZielFile.CopyFrom(QuellFile, 0);
  finally
    QuellFile.Free;
    ZielFile.Free
  end;
end;

yankee 20. Jan 2005 18:35

Re: Eigenes Install-Prog
 
Auch Delphi bringt eine
copyfile(Quelle, Ziel);
Funktion direkt mit. Also warum so umständlich?

gsh 20. Jan 2005 19:11

Re: Eigenes Install-Prog
 
Man weiss ja dann gar nicht wie diese Funktion aufgebaut ist. Könnte ja auch ein totaler Schmarn sein was Delphi da macht. :lol:

generic 21. Jan 2005 09:41

Re: Eigenes Install-Prog
 
gibt doch so viele installer
nsis, inno, msi und die lassen sich alle kostenlos nutzen. die beiden ersten gibts sogar mit source. (inno ist delphi)

gruss

yankee 21. Jan 2005 10:02

Re: Eigenes Install-Prog
 
Zitat:

Zitat von generic
gibt doch so viele installer
nsis, inno, msi und die lassen sich alle kostenlos nutzen. die beiden ersten gibts sogar mit source. (inno ist delphi)

gruss

Da sind wir doch schon wieder völlig woanders. Die Frage ist, wie man sich sowas programmiert, nicht ob das sinnvoll ist, oder ob es bereits was besseres gibt!!

gsh 21. Jan 2005 11:10

Re: Eigenes Install-Prog
 
Ich weiss nicht was du hast? :gruebel:
Ich hab bereits beschrieben wie man dateien mit der exe verschmelzen kann und wie man effektiv dateien kopiert!
Also wüsste ich nicht was der beginner des themas noch will :zwinker:

yankee 21. Jan 2005 11:21

Re: Eigenes Install-Prog
 
Zitat:

Zitat von gsh
Ich weiss nicht was du hast? :gruebel:
Ich hab bereits beschrieben wie man dateien mit der exe verschmelzen kann und wie man effektiv dateien kopiert!
Also wüsste ich nicht was der beginner des themas noch will :zwinker:

yo, hast recht, der könnte jetzt mal seine Saft dazugeben. Erst den Thread eröffnen und dann nichtmal mitschreiben *kopfschüttel*

Master_RC 10. Feb 2005 15:01

Re: Eigenes Install-Prog
 
@yankee: ich kann nicht immer im netz sein -,-'

aber das mit dem install-progg selber machen werd ich - wenn überhaupt dann mit der zip machen und darin dann ne ini anlegen, die eben dann alle files auflistet...

THX! @ all!


Alle Zeitangaben in WEZ +1. Es ist jetzt 11:01 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