Aktionen während der Laufzeit eines Programms

Useeu

Gesperrt
Moin,

ich möchte eine Datei X.ext während der Laufzeit von Y.ext (das ist das Programm, welches läuft) in Y.ext umbenennen. Da Y.ext ja schon existiert und sich das Programm nicht während der Laufzeit umbenennen kann, suche ich nach einer anderen Lösung. Ich habe von CreateRemoteThread gehört, dass dieser Thread auch nach der Laufzeit aktiv ist und die Datei Y.ext umbenennt, sodass man X.ext in Y.ext umbenennen kann, doch bei mir klappt es nicht. Ich hoffe, ihr könnt mir helfen (bei Verständnisschwierrigkeiten einfach zweimal durchlesen (möglichst langsam) ;)).

mfg


Useeu
 
Also hab ich das so zu verstehen:

Dein Programm X.exe . Im gleichen Verzeichnis ist Y.exe
Du willst nun in deinem Programm die Datei Y.exe in X.exe umbennen ?

Wozu willst du das machen ? Updates von deinem Programm ? Wenn ja mach dafür lieber ein eigenes Programm das von x.exe gestartet wird, x.exe beendet , Y.exe herunterlädt und dann als x.exe speichert
 
Also... ich habe ein Programm (selbstgecodet). Das starte ich. Dieses Programm soll sich nun umbenennen. Aber soweit ich weiß kann sich das Programm ja nicht während der Laufzeit umbenennen, genauso wenig wie es sich während der Laufzeit verändern kann (oder einlesen). Wie geht das jetzt?

mfg


Useeu
 
Man kann das Problem dadurch lösen, dass man eine Batchdatei vom Programm erzeugt, die vom Programm starten lässt und das Programm beendet. Die Batchdatei kann nun Dateien kopieren oder umbenennen, wie sie lustig ist und auch das umbenannte Programm wieder starten.

Verwendet habe ich das für einen automatischen Programmupdate, und Endurion hat mir gezeigt, wie es geht.

Die Details habe ich nicht im Kopf, es kann aber sein, dass ich sie noch in irgendeinem Projekt wiederfinde. Wenn du willst, suche ich mal danach.
 
Daran habe ich natürlich zuerst gedacht, aber das Programm beendet zu langsam und die Batch ist zu schnell, was bedeutet, dass die Batch das Programm nicht löschen kann, weil es noch läuft. Hat jemand eine Lösung mit CreateRemoteThread (wenn es damit möglich ist?)?

mfg


Useeu
 
Hm? Du musst nur dafür sorgen, dass die Batchdatei wirklich ganz zum Schluss gestartet wird. Wenn das immer noch nicht reicht, kann man auch relativ leicht ein Mini-Konsolenprogramm zusammenhacken, das mal ein paar Sekunden nichts tut (mit Sleep()), und das man in der Batchdatei aufrufen kann, um etwas Zeit zu gewinnen (wenn man das so nennen kann). (Furchtbarer Satz! :-) )
 
Zuletzt bearbeitet:
Also ich würde eine Weitere Anwendung machen (Konsolenprogramm z.exe) wie Kachelator schon gesagt hat.
Dieses Programm würde ich asynchron von X.exe starten lassen, was soviel heißt x.exe startet z.exe und wartet nicht auf z.exe, sonder beendet sich.
In z.exe würde ich warten, bis x.exe beendet ist, könnte man in einer Schleife tun, in dem man an z.exe die ProzessID von x.exe übergibt.
Somit kann z.exe solange warten, bis x.exe wirklich beendet ist, ob das nur 5 sek. oder 40 sek. dauert is ja egal, wichtig ist, daß immer wieder ein sleep() kommt, sonst hast du 100% Prozessorlast.
So ist dann x.exe wirklich beendet (man kann das noch gewaltsam nachholen falls was schiefgegangen ist), dann kannst du y.exe nehmen und in x.exe herunterladen.

So ich hoffe, das war jetzt nicht noch komplizierter ;-)

Gruß Homer
 
Nein, es muss eine .exe sein. X.ext war vorher nicht da, sondern wurde von Y.ext erstellt. Also muss alles von einer .exe gesteuert werden.

[edit] Jetzt nochmal ganz ausführlich: Mein Programm wird gestartet. Es soll sich selbst modifizieren. Geht nur leider nicht während der Laufzeit. Also was macht man? Man kopiert das Programm. Natürlich muss man dann einen anderen Namen wählen, z.B. temp.exe etc. Jetzt kann das Hauptprogramm die Kopie verändern. Gut, jetzt wäre nur noch eins zu machen: Die neue Kopie (die bearbeitet wurde) mit dem alten Programm zu ersetzen. [/edit]

mfg


Useeu
 
Zuletzt bearbeitet:
Zurück