anderes Programm mit Commandline starten?
Übersicht

![]() |
MidimasterBetreff: anderes Programm mit Commandline starten? |
![]() Antworten mit Zitat ![]() |
---|---|---|
Hilfe, ich komme alleine nicht weiter....
Wie kann ich von BMax aus ein anderes Programm starten und danach das eigene beenden? Es geht um eine Auto-Update-Funktion. Das Programm soll erst sein eigenes Update vom Server holen, dann selbst neu hochfahren. Lösen wollte ich das so: "Spiel.Exe" holt Update auf Festplatte unter "spiel.bin". Dann startet es "Restart.Exe". Dieses kopiert "spiel.bin" auf Spiel.exe" und startet wieder "Spiel.Exe". Das Ganze unter WIN-7 und OsX. mein Versuch bisher: BlitzMax: [AUSKLAPPEN] 'in der Spiel.exe: hiermit startet zwar die Restart.Exe und die Spiel.Exe wird beendet, aber es kommt das Argument erst gar nicht bei "Restart.Exe" an. Was mache ich falsch? |
||
Gewinner des BCC #53 mit "Gitarrist vs Fussballer" http://www.midimaster.de/downl...ssball.exe |
![]() |
Der Eisvogel |
![]() Antworten mit Zitat ![]() |
---|---|---|
Also, bei mir gibt es die Funktion CreateProcess garnicht. Ich nehme mal an du hast dazu ein Modul gefunden. Das bräuchte man um dir da Rat geben zu können. Ansonsten würde ich für Windows ShellExecute vorschlagen, jedoch denke ich mal du brauchst das Plattformunabhängig. | ||
Ungarische Notation kann nützlich sein.
BlitzMax ; Blitz3D Win 7 Pro 64 Bit ; Intel Core i7-860 ; 8 GB Ram ; ATI HD 5750 1 GB Projekte: Window-Crasher Ich liebe es mit der WinAPI zu spielen. |
Shaman |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
ich hatte mal ein ähnliches problem und hab das mit folgenden Code gelöst:
(Erweiterung eines Codes aus dem Codearchiv) : Code: [AUSKLAPPEN] Function ExecFileEx(cmd:String,args:String,path:String=":TempDir") If(Right(cmd, 1) = "\" Or Right(cmd, 1) = "/") Then cmd = Mid(cmd, 1, Len(cmd) - 1) If(FileType(cmd) = 2) Then OpenURL(cmd) Return EndIf ' ---> URL ausschließen ( Sonst mit dem Browser öffnen) Select(Lower(Left(cmd, 4))) Case("www.") OpenURL(cmd) Return Case("http") If(Lower(Left(cmd, 5)) = "http:" Or Lower(Left(cmd, 5)) = "https:") Then OpenURL(cmd) Return EndIf End Select ' -- Die Datei öffnen If path=":TempDir" Then path=getenv_("temp") If FileType(path+"\ExecFile.bat")=1 Then DeleteFile(path+"\ExecFile.bat") Local temp:TStream=WriteFile(path+"\ExecFile.bat") WriteLine(temp, "@ECHO off") WriteLine(temp, "call "+Chr(34) + cmd + Chr(34) + " " + args) temp.Close __ExecFile(path+"\ExecFile.bat") End Function Hier wird eine .bat-Datei erstellt, welche dann das Programm+Parameter (indirekt) aufruft. Dadurch läuft das normale Programm weiter, beziehungsweise in deinem Fall wird es beendet. Wenn es ein relativer Pfad ist, kannst du auch den Speicherort der .bat ändern (sonst im temporären verzeichnis). Die __ExecFile ist in 'helpers.c' definiert: Code: [AUSKLAPPEN] void __ExecFile(char *cmd) { system(cmd); } unter OsX musst du halt die helpers.c verändern. Vielleicht hilft dir diese Funktion. |
||
![]() |
BtbN |
![]() Antworten mit Zitat ![]() |
---|---|---|
Warum nimmst du nicht einfach system_ aus Pub.StdC?
Davon abgesehen würde das wo anders als unter Windows so eh nicht funktionieren, weils da keine bat dateien gibt, was aber egal ist, da man zumindest unter Linux ohne rücksicht sein eigenes binary überschreiben kann. Vermute einfach mal, dass das unter OSX auch geht. |
||
![]() |
BladeRunnerModerator |
![]() Antworten mit Zitat ![]() |
---|---|---|
... da war ich im Suchen zu lahm, auch ich hätte system_ vorgeschlagen.
Ab davon: Eisvogel, CreateProcess befindet sich in Pub.FreeProcess - und ist damit Bestandteil der Standardinstallation von BMax. |
||
Zu Diensten, Bürger.
Intel T2300, 2.5GB DDR 533, Mobility Radeon X1600 Win XP Home SP3 Intel T8400, 4GB DDR3, Nvidia GF9700M GTS Win 7/64 B3D BMax MaxGUI Stolzer Gewinner des BAC#48, #52 & #92 |
![]() |
Der Eisvogel |
![]() Antworten mit Zitat ![]() |
---|---|---|
OK, tut mir leid. Bei mir wird der Befehl weder von BLIde noch vom Compiler erkannt. Ich bekomme immer eine Fehlermeldung "Identifer not found". Wenn ich das MOD aber selbst mittels Import einbinde, funktioniert es.
Jetzt ab ich wieder was gelernt. |
||
Ungarische Notation kann nützlich sein.
BlitzMax ; Blitz3D Win 7 Pro 64 Bit ; Intel Core i7-860 ; 8 GB Ram ; ATI HD 5750 1 GB Projekte: Window-Crasher Ich liebe es mit der WinAPI zu spielen. |
![]() |
Midimaster |
![]() Antworten mit Zitat ![]() |
---|---|---|
@BladerRunner & Btbn
System_() habe ich auch schon probiert. Hier habe ich das Problem, dass die erste Anwendung Spiel.Exe nicht endet. BlitzMax wartet bei diesem Befehl. Und dann läßt sich in der Restart.Exe die Datei Spiel.Exe nicht durch ihr eigenes Update überschreiben. @Shaman vielen Dank. Ich hoffe aber immer noch, dass ich um einen Work-Around herumkomme... Außerdem wären dann für OsX noch ein zweiter Trick notwending. |
||
Gewinner des BCC #53 mit "Gitarrist vs Fussballer" http://www.midimaster.de/downl...ssball.exe |
![]() |
BladeRunnerModerator |
![]() Antworten mit Zitat ![]() |
---|---|---|
Hm, es verwundert mich dass Du die Argumente nicht erhälst, ich habe grade einen alten Code von mir ausgegraben der eine C64-Floppy per OpenCBM ansteuert und da funktioniert es mit createprocess problemfrei. Kann es sein dass dein Code zum Auslesen der Argumente fehlerhaft ist? | ||
Zu Diensten, Bürger.
Intel T2300, 2.5GB DDR 533, Mobility Radeon X1600 Win XP Home SP3 Intel T8400, 4GB DDR3, Nvidia GF9700M GTS Win 7/64 B3D BMax MaxGUI Stolzer Gewinner des BAC#48, #52 & #92 |
![]() |
Midimaster |
![]() Antworten mit Zitat ![]() |
---|---|---|
das habe ich auch schon ausprobiert. Wenn ich die Restart.Exe von der IDE aus starte und in der IDE etwas bei Command Line einfüge, kommen die Argumente an.
Empfänger-Code: BlitzMax: [AUSKLAPPEN] SuperStrict Bei der Gelegenheit kann ich dann jetzt ja auch mal gleich fragen, ob jemand weiß, wie das Import-Modul für den Befehl Process() heißt. Ich würde hier gerne mit einem Framework arbeiten. |
||
Gewinner des BCC #53 mit "Gitarrist vs Fussballer" http://www.midimaster.de/downl...ssball.exe |
![]() |
HolzchopfMeisterpacker |
![]() Antworten mit Zitat ![]() |
---|---|---|
PUB.FreeProcess
(Das müsste eigentlich jeweils auch in der Hilfe stehen, wenn du in der IDE ein Befehl, hier CreateProcess, mit 2x F1-Drücken aufrufst.) Edit Hier mal ein kleines funktionierendes Minimalbeispiel. Es unterscheidet sich von deinem eigentlich nur in der Anwendung von Print, die bei mir partout nicht hinhauen will: Das Programm, das das andere Programm startet, BlitzMax: [AUSKLAPPEN] SuperStrict Das andere Programm, BlitzMax: [AUSKLAPPEN] SuperStrict |
||
Erledige alles Schritt um Schritt - erledige alles. - Holzchopf
CC BY ♫ BinaryBorn - Yogurt ♫ (31.10.2018) Im Kopf da knackt's und knistert's sturm - 's ist kein Gedanke, nur ein Wurm |
![]() |
Midimaster |
![]() Antworten mit Zitat ![]() |
---|---|---|
Fettes Bussi! ![]() Es ist so wie Du schreibst: Der PRINT geht da nicht! Mit DrawText geht es auch bei mir! Das hat die ganze Zeit funktioniert, nur wurde es nicht angezeigt. Vielen lieben Dank! Da muss man erst mal draufkommen! Danke auch für den Tipp mit den Modulquellen. Ich hab gleich in der Anleitung nachgesehen. Tatsächlich steht immer ganz oben im Dokument die BRL.xxx aus der ein entsprechender Befehle kommt. Allerding ist bei mir CreateProcess() schon mal gleich gar nicht farbig als "bekannter Befehl" hinterlegt und in der rechten Help-Baumstruktur nicht aufgeführt. F1 nutzt da nix... Ist das normal? |
||
Gewinner des BCC #53 mit "Gitarrist vs Fussballer" http://www.midimaster.de/downl...ssball.exe |
![]() |
HolzchopfMeisterpacker |
![]() Antworten mit Zitat ![]() |
---|---|---|
Nein, das ist nicht normal ![]() Tipp: Die IDE vorher 2x mal öffnen, dann in der zweiten die Docs rebuilden, diese danach wieder zuerst schliessen, dann die erste schliessen. Dann kannst du sie wieder öffnen und hast sowohl die neue Doc als auch den herkömmlichen Workspace (mach ich immer so, weil BMax vor lauter Unwissenheit meint, beim Rebuilden müssten sämtliche Dokumente geschlossen werden *grossesaugenrollen*). mfG Holzchopf |
||
Erledige alles Schritt um Schritt - erledige alles. - Holzchopf
CC BY ♫ BinaryBorn - Yogurt ♫ (31.10.2018) Im Kopf da knackt's und knistert's sturm - 's ist kein Gedanke, nur ein Wurm |
![]() |
Midimaster |
![]() Antworten mit Zitat ![]() |
---|---|---|
Hat leider nichts gebracht. Der CreateProcess() bleibt grau. Sonderbar!
zum alten Fehler: Noch mysteriöser: Ich habe den Text in meiner RESTART.BMX so abgeändert, dass er deinem Beispiel 1:1 glich... Aber es hat trotzdem nicht funktioniert. Ich musste eine völlig neue RESTART3.BMX anlegen und alle benötigten Zeilen aus beiden Quellen einfügen. Damit geht es jetzt. ach so'ne Community is schon was schönes ![]() |
||
Gewinner des BCC #53 mit "Gitarrist vs Fussballer" http://www.midimaster.de/downl...ssball.exe |
- Zuletzt bearbeitet von Midimaster am Di, Sep 27, 2011 19:22, insgesamt einmal bearbeitet
![]() |
blackgecko |
![]() Antworten mit Zitat ![]() |
---|---|---|
Das Module pub.freeprocess ist kein bisschen dokumentiert, es ist also schon normal, dass nichts gehighlighted wird. | ||
So long and thanks for all the fish.
Fedora 17 | Windows 7 || BlitzPlus | BlitzMax Rechtschreibflame GO!!! Deppenapostroph | SeidSeit | Deppenakzent | DassDas | Deppenleerzeichen | TodTot | enzigste.info - Ja, ich sammel die. |
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group