2008-09-18 8 views
6

Obecnie WScript wyświetla okno komunikatu, gdy wystąpi błąd skryptu. Skrypty te są wywoływane przez inne procesy i są uruchamiane na serwerze, więc nie ma nikogo, kto mógłby odrzucić ten błąd.CScript/WScript Zapobieganie blokowaniu błędu

Chciałbym, aby komunikat o błędzie został przesłany do STDOUT, a wykonanie zwróci proces wywołujący. Popping jako MSGBox po prostu zawiesza całą sprawę.

Pomysły?

Odpowiedz

4

ten sposób powinien być uruchomiony Script zadań wsadowych:

cscript //b scriptname.vbs 
+0

Zobacz także http://stackoverflow.com/questions/8678441/difference-between-wscript-and-cscript/9062764#9062764 – Ben

0

Nie podano, jakiego języka używasz. Jeśli używasz VBScript, możesz napisać procedurę obsługi błędów, używając instrukcji On Error.... Jeśli używasz JScript, możesz użyć bloku try {} catch (x) {}.

0

nie rób tego:

VBScript: On Error Resume Next

języku angielskim: "gdy masz błąd, zignoruj ​​je i po prostu iść dalej"

2

Nie używaj WScript; użyj CScript. W wierszu polecenia systemu Windows wpisz następujące polecenie, aby wyświetlić pomoc.

cscript //?
Proponuję następujące:
cscript //H:CScript
Spowoduje to, że CScript będzie twoim domyślnym interpreterem skryptów. CScript drukuje komunikaty do konsoli (np. Stdout) zgodnie z własnymi potrzebami. (Nie używa okien dialogowych.) Możesz także spróbować użyć przełącznika // B, ale nie mogę stwierdzić, czy ma on działać w trybie skryptowym, czy nie. Jeśli jest to trwały, jednorazowy przełącznik, taki jak przełącznik // H, to może ci pomóc; jeśli nie, być może trzeba zmodyfikować wszystkie zdalne programy, aby je uwzględnić. Z podanych informacji myślę, że zmiana domyślnego interpretera (// H) zrobi to, co chcesz.

Należy również dodać obsługę błędów, aby skrypt nie kończył się z powodu błędu. W Visual Basic Scripting Edition, najłatwiejszą rzeczą do zrobienia, jeśli chcesz po prostu zignorować błędy, jest dodanie poniższych elementów do początku skryptu.

On Error Resume Next
Aby uzyskać więcej informacji, zobacz http://msdn.microsoft.com/en-us/library/53f3k80h(VS.85).aspx.

1

Użyj WScript.Echo zamiast MsgBox. I uruchom skrypt przy użyciu CSCRIPT zamiast WSCRIPT.

0

Proponuję umieścić swój kod skryptu w SUB - na przykład DoWork - i zakodować swój skrypt coś takiego:

On Error Resume Next 

DoWork 

If Err.Number <> 0 Then 

    If "CSCRIPT.EXE" = UCase(Right(WScript.Fullname, 11)) Then 
     WScript.StdErr.Write Err.Number & ": " & Err.Description 
    Else 
     WScript.Echo Err.Number & ": " & Err.Description 
    End If 
    WScript.Quit 1 
End If 

Private Sub DoWork 

    ... your code ... 

End Sub 

W ten sposób, po uruchomieniu skryptu za pomocą cscript //b, a to się nie powiedzie, otrzymasz komunikat błędu wyjście na stderr a dzwoniący otrzyma nie- zero poziomu błędu.

Powiązane problemy