BAT-Datei ausführen mit ExecFile

Übersicht BlitzBasic Allgemein

Neue Antwort erstellen

Eingeproggt

Betreff: BAT-Datei ausführen mit ExecFile

BeitragDo, Nov 29, 2007 22:54
Antworten mit Zitat
Benutzer-Profile anzeigen
Hallo wiedermal.

Ich hab schon wieder so nen Mini-Code, der einfach nicht das tut, was er soll.

Diesmal will ich eine mit Blitz heruntergeladene Datei aus einem Ordner in den anderen verschieben. Ohne CopyFile!

Es liegt nahe, dass ich mich den guten alten DOS-Befehlen bediene.

Sowohl Datei herunter laden als auch tmp.bat Datei händisch ausführen funktioniert. Nur die Datei in Blitz ausführen schaff ich nicht Sad Embarassed

Code: [AUSKLAPPEN]
writer=WriteFile(CurrentDir()+"temp\tmp.bat")
WriteLine(writer,"MOVE "+Chr(34)+CurrentDir()+"temp\test.exe"+Chr(34)+" "+Chr(34)+CurrentDir()+"test.exe"+Chr(34))
WriteLine(writer,Chr(34)+CurrentDir()+"test.exe"+Chr(34))
CloseFile writer
ExecFile CurrentDir()+"temp\tmp.bat"


Hoffe, das Problem ist verständlich und vor allem einfach zu lösen.

mfG, Christoph.
Gewinner des BCC 18, 33 und 65 sowie MiniBCC 9

hectic

Sieger des IS Talentwettbewerb 2006

BeitragDo, Nov 29, 2007 23:24
Antworten mit Zitat
Benutzer-Profile anzeigen
Es könnte Probleme geben, eine Datei zu schreiben und in weniger als einer Millisekunde schon ausführen zu wollen. Daher müsste man eine Pause anlegen, die aber bei jedem System unterschiedlich lang ist. Also müsste eine Warteschleife gemacht werden, die überprüft, bis Windows die Datei freigegeben hat. Da das alles mehr schlecht als recht ist, würde ich auf blitzinterne Befehle zurückgreifen. Du willst aber anscheinend das nicht, also schaue dir mal den DOS-Befehl CMD an. Damit solltest du alle deine Sachen auch ausführen können, ohne dabei eine Datei schreiben zu müssen.
Download der Draw3D2 V.1.1 für schnelle Echtzeiteffekte über Blitz3D

Eingeproggt

BeitragFr, Nov 30, 2007 0:07
Antworten mit Zitat
Benutzer-Profile anzeigen
Danke für den Hinweis, eine Pause wär angebracht. Hab diesen Teil direkt vor ExecFile gegeben:
Code: [AUSKLAPPEN]
Repeat
  Delay 100
Until FileType(CurrentDir()+"temp\tmp.bat")=1


Aber es ist immernoch dasselbe.

Was die Verwendung von CMD oder Blitzinternen Befehlen angeht:
Ja, ich würde sie auch lieber benutzen, aber es steckt Folgendes dahinter:
Meine Datei soll eine Datei aus dem Internet laden und sich selbst ersetzen sozusagen. Dazu muss man auf Bat ausweichen, oder? Ein Problem könnte allerdings sein, dass mein Programm ja noch läuft, nachdem es die Bat aufgerufen hat. Da müsste ich auch noch die laufende Exe killen...

Aber so weit bin ich noch nicht. Bis jetzt teste ich nur den Code anhand einer Dummy-Datei, die verschoben werden soll.

mfG, Christoph.

EDIT: Hab den Code kompiliert und nochmal getestet. Es funktioniert auch so nicht. Bemerkenswert finde ich jedoch, dass das BB-Programm bei ExecFile den Fokus verliert, allerdings kein Prozess oder Task geöffnet wird. Zumindest merk ichs nicht...
Gewinner des BCC 18, 33 und 65 sowie MiniBCC 9

hectic

Sieger des IS Talentwettbewerb 2006

BeitragFr, Nov 30, 2007 1:22
Antworten mit Zitat
Benutzer-Profile anzeigen
Kein Spiel datet sich so, wie du beschrieben hast, sich selbst up. In deinem Fall müsste auch die Batchdatei auf das Beenden der Hauptdatei warten. Da so ein Vorhaben nur auf Probleme stoßen kann, würde ich auf eine manuelle Aktualisierung legen.
Download der Draw3D2 V.1.1 für schnelle Echtzeiteffekte über Blitz3D

D2006

Administrator

BeitragFr, Nov 30, 2007 2:14
Antworten mit Zitat
Benutzer-Profile anzeigen
Habe eine Idee für einen Workaround:

Du rufst die heruntergeladene Datei mit einem bestimmten Parameter auf und beendest das Programm. Das Programm erkennt den Parameter und kopiert sich selbst (in Stiller Hoffnung, dass das geht) ins übergeordnete Verzeichnis und ruft dieses mit einem anderen Parameter auf. Dieses wiederum erkennt den Parameter und löscht die Datei im temp Verzeichnis. Kompliziert, könnte aber funktionieren.
Intel Core i5 2500 | 16 GB DDR3 RAM dualchannel | ATI Radeon HD6870 (1024 MB RAM) | Windows 7 Home Premium
Intel Core 2 Duo 2.4 GHz | 2 GB DDR3 RAM dualchannel | Nvidia GeForce 9400M (256 MB shared RAM) | Mac OS X Snow Leopard
Intel Pentium Dual-Core 2.4 GHz | 3 GB DDR2 RAM dualchannel | ATI Radeon HD3850 (1024 MB RAM) | Windows 7 Home Premium
Chaos Interactive :: GoBang :: BB-Poker :: ChaosBreaker :: Hexagon :: ChaosRacer 2

Eingeproggt

BeitragFr, Nov 30, 2007 12:13
Antworten mit Zitat
Benutzer-Profile anzeigen
Bekommt man bei dieser Lösung nicht auch Probleme mit ExecFile?
Dieser Befehl wartet ja auf die Beendigung des aufgerufenen Programms.
Oder Moment. Da wäre dann die Anwendung von CMD besser, oder?

Ich werd das im Laufe des Tages versuchen. Hoffentlich wirds was Smile

Danke!
Gewinner des BCC 18, 33 und 65 sowie MiniBCC 9

hectic

Sieger des IS Talentwettbewerb 2006

BeitragFr, Nov 30, 2007 12:48
Antworten mit Zitat
Benutzer-Profile anzeigen
Ich habe mir mal überlegt ein Setup zu machen, der in einer anderen Grafikauflösung (Fenster) als das Spiel selbst läuft (Usereingabe auf Vollbild oder Fenster). Mein erster Lösungsansatz war es mit zwei .exe -Dateien zu machen, wo dann eben ein Parameter zur anderen geschickt wird, in welcher Auflösung gestartet werden soll. Was ich aber blöd fand. Das gleiche kann man auch mit nur einer .exe machen, die sich selbst aufruft. Dabei wartet die erst aufgerufene nicht auf das Ende der zweitaufgerufene...

Beispielcode:

Code: [AUSKLAPPEN]
cl$=CommandLine()

If cl=""
   Graphics 400,300,0,2
   SetBuffer BackBuffer()
   AppTitle "1"
   Print "Taste drücken"
   WaitKey
   ExecFile "start.exe +blub"
   
   For q=1 To 1000
      Print "Als Beweis, ich geh jetzt mal"
   Next
   Flip
   End
End If


Graphics 800,600,0,2
SetBuffer BackBuffer()
AppTitle "2"

Print "Ich bin die Nr. 2"
WaitKey
End


Das funktioniert nur mit einer compilierten .exe und diese muss ''start.exe'' heissen.
Download der Draw3D2 V.1.1 für schnelle Echtzeiteffekte über Blitz3D

Starwar

BeitragMi, Dez 26, 2007 18:55
Antworten mit Zitat
Benutzer-Profile anzeigen
teste mal: execfile (chr$(34)+currentdir$()+"blubb.bat"+chr$(34))

Eingeproggt

BeitragMi, Dez 26, 2007 19:36
Antworten mit Zitat
Benutzer-Profile anzeigen
Sry, hab wohl vergessen zu erwähnen, dass das Thema längst vom Tisch ist. Ich arbeite nun mit den Blitz Befehlen und halt 2 verschiedenen Exe, die sich selbst managen Smile

mfG, Christoph.
Gewinner des BCC 18, 33 und 65 sowie MiniBCC 9

Neue Antwort erstellen


Übersicht BlitzBasic Allgemein

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group