| 

.NET C# Java Javascript Exception

0
Ich möchte die Batchdatei GAR NICHT ändern. Wie kann ich dafür sorgen dass mein Programm (move) aufgerufen wird anstatt das von MS. Ich möchte mitprotokollieren wann & was genau in der Gegend rumkopiert wird als Drop-In Applikation. Versucht habe ich es natürchich bereits:

  • Eine move.exe im gleichen Ordner als die Batchdatei
  • Eine Batchdatei move.bat -> die move.exe aufruft

Nichts von beidem geht (PATH Auflösungstechnisch). Kann man dies überhaupt hinkriegen?
11.09.2009
jdehaan 434 2 7
jdehaan 434 2 7
Genauere Angaben:
Ich habe eine Batchdatei A.bat, die ich Monitoren möchte. Die ruft "move"/"copy"/"del"/"rename" usw auf. Diese Aufrufe möchte ich umleiten, ohne A.bat zu ändern. Dann habe ich es mit move.bat/move.exe versucht, ohne Erfolg.
jdehaan 11.09.2009
das heißt du möchtest schon die MS-Standard Move/Del/Rem usw. aufrufen ?
MiW 11.09.2009
Nein, er möchte diese Standard-Befehle umleiten auf eine eigene .exe Datei. Sprich wenn in der BATCH steht move c:\test\ c:\test2\ soll die move.exe (die er selber geschrieben hat) aufgerufen werden und diesen Befehl ausführen und ein Protokoll schreiben.
Dustin Klein 11.09.2009
na dann einfach im SYSTEM32-Ordner die move umbenennen und durch die eigene ersetzen ...
MiW 11.09.2009
move (und copy, del, rename) sind interne Kommandos des cmd.exe Kommandoprozessors und keine Programme, die in c:\windows\system32 oder sonstwo zu finden ist, und können deshalb auch nicht ersetzt werden.
BeachBlocker 11.09.2009
5 Antworten
2
Ich glaube, dass das so leicht nicht funktionieren wird, zumindest nicht ohne deine Batchdatei zu verändern. Der "move" Befehl, der innerhalb der Batch aufgerufen wird, wird von der Konsole als Befehl erkannt.

Bei anderen Programmen ist es so, dass er erst nachschaut, ob der Befehl in der internen Bibliothek vorhanden ist (wie z.B. move, copy, etc.). Ist dieser Befehl vorhanden, wird der Befehl so ausgeführt wie er in der Konsole bestimmt ist. Ist dieser nicht vorhanden, so wird nach einer entsprechenden Anwendung (z.B. einer .exe im Windows Verzeichnis) gesucht, die diesen Namen trägt.

Also wird der Move Befehl grundsätzlich von der Kommandozeile interpretiert. Ich kenne auch keinen Weg, der es dir erlaubt das move oder copy aus der Konsole zu entfernen (also den Befehl als "unbekannt" zu handlen). Du kannst also höchstens in der BATCH Datei eine protokollierung einfügen.

Korrigiert mich, wenn ich falsch liege.
11.09.2009
Dustin Klein 2,9k 2 9
Ich hab das ehh anders verstanden... ich glaube er hat eine *.bat Datei und hat eine *.exe erstellt und wundert sich dass immer die *.bat Datei aufgerufen wird ;-) ...mal unabhängig ob move, copy usw. Systembefehle sind.
Scout 11.09.2009
Vielleicht sollte er nochmal genau erläutern, was er hat und was er will.
MiW 11.09.2009
Sorry leute für die Unklarheit. Ich habe oben etwas beigefügt. So langsam glaube ich auch nicht mehr daran, dass es geht und lenke in Dustin's Richtung.
jdehaan 11.09.2009
1
Du musst einfach den absoluten Pfad zu deiner Move-Datei angeben.

Und die Ausgabe, die deine move-Routine hoffentlich ausgibt kannst du ja mit > in eine Datei umleiten.

also in deinem falle

move.bat > move.log

ich weiß ja nicht was noch in der Batchdatei passiert, aber notfalls tut es ja auch

X:\dein_pfad\move.exe {parameter} > move.log
11.09.2009
MiW 1,0k 1 8
1
Ich sehe zwei Wege, die aber aufwändiger sind, als Du Dir vermutlich erhoffst:

* Du implementierst Deinen eigene Kommandoprozessor und änderst die Assoziation für Batch-Datei, so dass sie mit Deinem Kommandoprozessor aufgerufen werden. Falls Du nicht zu Übungszwecken einen vollständigen Ersatz schreiben willst :-) würde dieser die Batchdatei nur on-the-fly umschreiben und dann den Windows-Kommandoprozessor aufrufen.

* Du lässt die Batchdateien völlig in Frieden, aber installierst auf dem System einen Service, der (ausgewählte) Dateisystemaktivitänen protokolliert.
11.09.2009
pjacobi 1,1k 2 7
0
Das wird so ohne weiteres nicht funktionieren, weil Windows immer zuerst die *.bat ausführt und danach erst die *.exe ... wo die Einstellung verankert ist fällt mir gerade nicht ein.
Aber mal ein anderer Vorschlag:

Warum benennst du nicht die *.bat um und rufst in deinem Programm die umbenannte *.bat auf?

Grüßle
11.09.2009
Scout 1,4k 2 8
Funktionniert leider nicht... Schon versucht.
jdehaan 11.09.2009
"Ich möchte die Batchdatei GAR NICHT ändern. Wie kann ich dafür sorgen dass mein Programm (move) aufgerufen wird anstatt das von MS."

Da er dort Microsoft erwähnte, denke ich er meint die move und copy Befehle aus der Kommandozeile... aber kA, kann auch sein, dass ich mich da vertue ^^
Dustin Klein 11.09.2009
Ich glaube ich versteh einfach nicht, was die Aufgabenstellung ist :)
MiW 11.09.2009
0
Ich glaube was dir hilft ist

doskey move=move.exe
und
doskey copy=copy.exe

Wenn du das in einer Command-Shell aufrufst bevor du die Batch-Datei dadrin ausführst solltest du genau das haben was du brauchst
11.09.2009
Meines Wissen und nach meinem Test funktionieren doskey Aliase nicht im Batch:

> doskey bla=dir r:\
> bla
Volume in drive R is TEMP
...
> echo bla> blabla.bat
> blabla
'bla' is not recognized as an internal or external command operable program or batch file.
BeachBlocker 11.09.2009
Guter Einwand. Hab ich gar nicht dran gedacht das auch in einer Batch-Datei zu testen.
lbarto 11.09.2009

Stelle deine Windows-Frage jetzt!