[GELÖST] Probleme mit einer Batch-Datei

Hallo zusammen,

ich habe mir eine kleine, sehr einfache Batch Datei geschrieben um einen lokalen Webserver zu starten um im Anschluss direkt den Standardbrower zu öffnen und auf localhost zu verweisen.

Code:
@echo off
cls
echo.
echo.
echo Starte Webserver...
start /D "%CD%" /NORMAL nanweb.exe
echo.
@ping /n 2 localhost >nul
echo Starte Browser...
start http://localhost
@echo on
Der Befehl Ping verschafft mir nur 2 Sekunden Zeit, bis der Server gestartet ist ohne das jemand eine Taste drücken muss. Mein Problem ist nun, das Windows zu lange braucht um (in meinem Fall) Firefox schnell genug zu öffnen. Es erscheint die Fehlermeldung das http://localhost nicht geöffnet werden konnte. Ein paar Sekunden nach der Meldung erscheint dann Firefox mit dem gewünschten Inhalt. Im Prinzip klappt also alles, nur möchte ich diese nervige Fehlermeldung von Win abschalten.

>NUL und 2>NUL klappt nicht. Da wird anscheinend nur die Fehlerausgabe (in der Konsole) umgeleitet, aber keine PopUps unterdrückt. Hat jemand eine Idee?

Grüße Thuroc
 
Hi,

meines Wissens gibt es in einer Batch-Datei keine Möglichkeit zu "warten".
Zum einen gibt es als lösung das Programm "wait.exe" das du aus der Batch callen kannst.

Wenn du auf Externes verzichten willst kannst du folgendes Beispiel mal einbauen.

Code:
echo >wait.vbs wscript.sleep 5000
cscript wait.vbs
del wait.vbs
c:windowsnotepad.exe
Das tut nichts anderes als sich temporär ein kleines vbscript zu bauen welches dann den Sleep ausführt.GreetsMortiis
 
Wenn ich die Problematik mit Batch bisher richtig verstanden habe, werden die Befehle nacheinander ausgeführt. Und genau da ist ja mein Problem. Das warten vor dem Aufruf des localhost klappt ja einwandfrei. Ich muss Windows selber dazu bringen, länger auf das öffnen des Firefox zu bewegen, also die wartezeit WÄHREND eines Befehls verlängern.

Es geht im Prinzip also nur um die Zeile "start http://localhost".

Der Standardbrowser wird geladen, braucht zu lange und schon wirft Windows mit Fehlermeldungen um sich. Ein paar Sekunden später erscheint dann das korrekte Ergebniss im Browser.
 
So kann man ein Sleep nachbauen.
Code:
#include <stdio.h>
#include <stdlib.h>
#include <windows.h>

int main(int argc, char *argv[])
{
  if(argc!=2)
      puts("usage: sleep milli-seconds\n");
  else
     Sleep(atoi(argv[1]));
            
  return 0;
}
 
Original von valenterry
Warum erhöhst du dann nicht die Zeit, die zwischen dem Starten des Servers und zwischen dem Aufrufen Firefoxs liegt?

Weil es nicht daran liegt.

Es liegt einfach nur daran, das Windows dem Standardbrowser nicht genug Zeit gibt zu starten.

Dann kommt diese Fehlermeldung. Kurz danach ist der Browser fertig geladen und zeigt auch das gewünschte Erebniss an.

Vor oder nach dem Befehl "start http://localhost" eine Pause einzufügen bringt also nichts, ich müsste die Pause während der Ausführung des Befehls einbauen.

//EDIT

Ich hab die Lösung gefunden. Einfach in der Registry nachschauen welcher Standardbrowser gesetzt wurde und ausführen lassen:
Code:
for /f "skip=2 tokens=4" %%i in ('REG QUERY "HKLM\SOFTWARE\Clients\StartMenuInternet" /v ""') do SET b=%%i
start %b% http://localhost/ >NUL 2>NUL
 
hab leider(?) keinen FF, um es zu testen und mein Browser startet schnell genug ;) :
Code:
rundll32.exe url.dll, FileProtocolHandler www.google.de
 
Das mit der rund32ll hab ich auch ausprobiert, da kommt aber der selbe Fehler wie bei meiner ersten Variante.

Das Problem scheint einfach zu sein, das Windows selber zu lange braucht um den Standardbrowser abzufragen, und das geschieht sowohl in meiner erstern Version, also auch bei deinem Vorschlag.

Die gepostete Lösung schaut ja vorher nach, welcher Standardbrowser gesetzt ist und startet dann gleich das passende Programm, ohne nach einem passenden Programm zu suchen.

Genau das scheint der Problemfaktor gewesen zu sein. Windoof halt...
 
Zurück
Oben