janni
Goto Top

xcopy und Meldung (null) ist keine zulässige Win32-Anwendung

Moinsen aus dem Norden,

ich habe ein ganz böses Problem mit einem Startscript (auf Win XP Pro SP2 Systemen). Nach der Ausführung des folgenden:

:: das ganze für die 32bit Version
if exist C:\Programme\prog > NUL (
xcopy \\server\update* %dir_prog% /s /r /y /v /e
)

bekomme ich beim Aufrufen der kopierten *.exe-files die Meldung "(null) ist keine zulässige Win32-Anwendung"
Das ganze passierte bis jetzt auf allen Maschinen.

Wenn ich das ganze in der CMD aufrufe, läuft alles sauber durch und die Anwendungen starten.
Btw. genau der gleich Befehl, mit dem Quellverzeichniss prog_x64 funktioniert auf 64bit-Systemen ohne Probleme.

Jemand eine Idee woran das liegen könnte ?

Danke schon einmal.

Content-Key: 62068

Url: https://administrator.de/contentid/62068

Printed on: April 19, 2024 at 07:04 o'clock

Member: bastla
bastla Jun 22, 2007 at 10:31:53 (UTC)
Goto Top
Hallo Janni!

Wie sieht's denn ohne die mE unnötige Umleitung "> NUL" aus? (Die Klammern würde ich dann auch gleich einsparen.)

Grüße
bastla
Member: Janni
Janni Jun 22, 2007 at 10:59:48 (UTC)
Goto Top
Ohne "> NUL" bleibt alles beim gleichen ....

Habe aber jetzt gesehen (warum eigentlich nicht früher ? Auch egal) das er die Zeilen für 64bit ebenfalls ausführt. Diese sehen so aus:
:: das ganze für die 64bit Version
if exist C:\applications\prog_x64 (
	if exist tasklist /FI "IMAGENAME eq task.exe" (  
		taskkill /FI "IMAGENAME eq task.exe"  
		echo Prozess task.exe getoetet
	)
xcopy \\server\update_x64\* %prog_x64_dir% /s /r /y /v /e
)

obwohl das Verzeichniss C:\applications\prog_x64 definitiv nicht auf den 32bit Systemen existiert werden die Dateien kopiert.
Member: Janni
Janni Jun 26, 2007 at 07:45:25 (UTC)
Goto Top
Auch wenn ich noch immer nicht verstehe, warum die if-Schleife ausgeführt wird. Habe halt einfach ein goto eingebaut .....

Danke
Member: Biber
Biber Jun 26, 2007 at 08:32:21 (UTC)
Goto Top
Moin Janni,

if exist tasklist /FI "IMAGENAME eq task.exe" ( ...
---> diese Zeile ist syntaktisch nicht richtig und führt zu diesen merkwürdigen Effekten.

Wenn Du mit einer XP-Tasklist.exe das Vorhandensein eines Tasks prüfen willst, kannst Du z.B wie folgt vorgehen:
[Beispiel am CMD-Prompt]
>tasklist  /FI "imagename eq WHATEVER" 2>&1 |find  /i "keine Tasks">nul && echo not found  

Bedeutet im Einzelnen:
 tasklist  /FI "imagename eq WHATEVER" 2>&1  
  • Rufe tasklist.exe auf, frag nach WHATEVER, leite Fehlerausgaben auch auf Kanal 1 um.
  • Denn: Mein Tasklist.exe [XP SP2 dt] arbeitet NICHT sauber, d.h. gibt KEIN Errorlevel 1 zurück, wenn WHATEVER nicht gefunden wurde. Wenn WHATEVER nicht gefunden wird, dann kommt eine Fehlermeldung auf STDERR/Kanal 2 "INFORMATION: Es werden keine Tasks mit den angegebenen Kriterien ausgeführt."
 ..|find  /i "keine Tasks">nul  
  • Leite den ganzen Quark um als Input für die Find.exe.... die soll nach "keine Tasks" suchen.
.. && echo not found
  • Wenn sie diesen String findet, dann gibt es WHATEVER nicht in der Taskliste.

Würde summa summarum bedeuten, Du könntest es so angehen:
...
if exist C:\applications\prog_x64 (
   tasklist  /FI "imagename eq task.exe" 2>&1 |find  /i "keine Tasks">nul && goto :ForgetIt  
   Taskkill  /FI "imagename eq task.exe"  
    Echo Prozess task.exe plattemacht...
)
:ForgetIt
.....

Gruß
Biber
Member: Janni
Janni Jun 26, 2007 at 09:25:18 (UTC)
Goto Top
Das muss man erst einmal wissen face-wink

Vielen Dank !