Fehler #0 beim Aufruf Update.cmd

Fehler #0 beim Aufruf Update.cmd

Postby rbr555 » 19.01.2018, 09:36

Hallo,

bei einem unserer PCs erscheint folgende Fehlermeldung wenn man den Start Button drückt.
"Fehler #0 beim Aufruf von /D /C Update.cmd /updatesc in D:\client"
Normalerweise wird das Programm aus einem Network Share gestartet, dies funktioniert für alle PCs außer für diesen einen.
Um Probleme mit dem Share auszuschließen habe ich das Client Verzeichnis auf die lokale Platte kopiert.
Auffällig ist, dass der 'Software Tab' nicht angezeigt wird.
Rufe ich Update.cmd aus einem CMD mit Administrationsrechten läuft die Installation (ohne den MSI Part) durch.

MfG
rbr555
Attachments
wsu_fehler.jpg
(42.69 KiB) Not downloaded yet
rbr555
 
Posts: 22
Joined: 04.01.2013, 12:00

Re: Fehler #0 beim Aufruf Update.cmd

Postby Dalai » 19.01.2018, 15:50

Bitte eine CMD öffnen und dort
Code: Select all
set comspec
eingeben und das Ergebnis hier posten.

Unabhängig davon gibt es im UpdateInstaller keinen Software Tab, den gibt's nur im UpdateGenerator. Außerdem: UpdateInstaller kann seine Arbeit generell nur mit Adminrechten ausführen.

Grüße
Dalai
Dalai
 
Posts: 1041
Joined: 12.07.2016, 21:00

Re: Fehler #0 beim Aufruf Update.cmd

Postby boco » 19.01.2018, 21:12

@Dalai: Den Software-Tab gibt es im UpdateInstaller, aber nur, wenn auch MSI-Installer konfiguriert sind! Sonst macht es ja keinen Sinn, ihn anzuzeigen (KISS-Prinzip).

Siehe auch UpdateInstaller.au3, ca. um Zeile 682 rum.
Microsoft update catalog: http://catalog.update.microsoft.com/v7/site/
Windows Install media download: https://support.microsoft.com/en-us/help/15088/windows-create-installation-media
boco
 
Posts: 2391
Joined: 24.11.2009, 17:00
Location: Germany

Re: Fehler #0 beim Aufruf Update.cmd

Postby Dalai » 19.01.2018, 22:30

@boco: Ah, das wusste ich nicht (weil nie benutzt *g*). Danke!

Grüße
Dalai
Dalai
 
Posts: 1041
Joined: 12.07.2016, 21:00

Re: Fehler #0 beim Aufruf Update.cmd

Postby rbr555 » 22.01.2018, 08:34

Hallo,

Code: Select all
C:\Windows\system32>set comspec
COMSPEC=C:\Windows\System32\cmd.exe


MfG
rbr555
rbr555
 
Posts: 22
Joined: 04.01.2013, 12:00

Re: Fehler #0 beim Aufruf Update.cmd

Postby Dalai » 22.01.2018, 16:39

OK, die Ausgabe ist soweit in Ordnung. Leider hindert uns derzeit der eigene Code daran, herauszubekommen, wo es genau klemmt.

Der Code-Teil in wsusoffline\client\UpdateInstaller.au3
Code: Select all
If Run(@ComSpec & " /D /C Update.cmd" & $options, $scriptdir, @SW_HIDE) = 0 Then
        If ShowGUIInGerman() Then
          MsgBox(0x2010, "Fehler", "Fehler #" & @error & " beim Aufruf von" _
                           & @LF & @ComSpec & " /D /C Update.cmd" & $options & " in" _
                           & @LF & $scriptdir & ".")
        Else
          MsgBox(0x2010, "Error", "Error #" & @error & " when calling" _
                          & @LF & @ComSpec & " /D /C Update.cmd" & $options & " in" _
                          & @LF & $scriptdir & ".")
        EndIf
ist sehr ungünstig. Hier steht ein Funktionsaufruf vor der Benutzung des Makros @error. AutoIt setzt @error zu Beginn jedes Funktionsaufrufs zurück. Wenn man @error also sinnvoll verwenden will, muss man es direkt nach dem fehlgeschlagenen Funktionsaufruf in eine Variable speichern (oder direkt in eine if-Bedingung packen).

Ich überlege gerade, wie man hier für eine schnelle Lösung sorgen kann. Ist das UpdateInstaller.au3 ausführbar ohne Neukompilierung und externe Skripte?

@rbr555:
Vorschlag: Lade AutoIt herunter (Direktlink zum ZIP) und entpacke es in ein Verzeichnis deiner Wahl. In Zeile 1034 von wsusoffline\client\UpdateInstaller.au3 ersetze
Code: Select all
If ShowGUIInGerman() Then
durch
Code: Select all
If 1==1 Then
. Führe das Skript dann so aus:
Code: Select all
D:\pfad\zu\AutoIt\AutoIt3.exe D:\client\UpdateInstaller.au3
Die Pfade musst du natürlich anpassen.

Sollte dann wieder eine Meldung kommen, diese bitte hier posten (den Inhalt der Meldung kann man auch mit Strg+C kopieren).

Grüße
Dalai
Dalai
 
Posts: 1041
Joined: 12.07.2016, 21:00

Re: Fehler #0 beim Aufruf Update.cmd

Postby rbr555 » 24.01.2018, 09:11

Hallo,

der Fehler ist identisch, allerdings erscheint er nur, wenn ich die Anwendung aus einer CMD die nicht als Administrator gestartet wurde aufrufe.

---------------------------
Fehler
---------------------------
Fehler #1 beim Aufruf von
/D /C Update.cmd in
D:\client.
---------------------------
OK
---------------------------

Ich habe die Meldung mal um @OSArch erweitert:
Code: Select all
      If (@OSArch <> "X86") Then
        DllCall("kernel32.dll", "int", "Wow64DisableWow64FsRedirection", "int", 1)
      EndIf
      If Run(@ComSpec & " /D /C Update.cmd" & $options, $scriptdir, @SW_HIDE) = 0 Then
        If 1==1 Then
          MsgBox(0x2010, "Fehler", "Fehler #" & @error & " beim Aufruf von" _
                           & @LF & @ComSpec & " /D /C Update.cmd" & $options & " in" _
                           & @LF & $scriptdir & ". " & @OSArch)
        Else
          MsgBox(0x2010, "Error", "Error #" & @error & " when calling" _
                          & @LF & @ComSpec & " /D /C Update.cmd" & $options & " in" _
                          & @LF & $scriptdir & ". " & @OSArch)
        EndIf
      Else
        ExitLoop
      EndIf


---------------------------
Fehler
---------------------------
Fehler #1 beim Aufruf von
/D /C Update.cmd in
D:\client. X64
---------------------------
OK
---------------------------

MfG
rbr555
rbr555
 
Posts: 22
Joined: 04.01.2013, 12:00

Re: Fehler #0 beim Aufruf Update.cmd

Postby Dalai » 24.01.2018, 17:28

Sehr seltsam. Warum funktioniert das Makro @ComSpec nicht sauber? Bei mir startet UpdateInstaller das Skript auch, wenn ich nicht Admin bin (bricht im Verlauf aber natürlich aufgrund unzureichender Rechte ab).

Speichere das folgende Skript mal als comspectest.au3 und starte es:
Code: Select all
#include <WinAPI.au3>

global $e=0
if (@ComSpec == "") then
    $e = _WinAPI_GetLastError()
EndIf

global $s = StringFormat("#%s#", @ComSpec)

MsgBox(0, "@ComSpec & GetLastError", $s & @CRLF & $e)

und poste den Inhalt der Meldung. Ich habe die Hoffnung, so rauszubekommen, warum das Makro nichts zurückliefert.

Ein kleiner Testfall von mir, um es zu erzwingen: CMD geöffnet,
Code: Select all
set comspec=
e:\Programme\autoit\3.3.14.2\AutoIt3.exe comspectest.au3
liefert diese Meldung
Code: Select all
---------------------------
@ComSpec & GetLastError
---------------------------
##
203
---------------------------
OK   
---------------------------
Fehler 203 bedeutet laut Liste der System Error Codes
Code: Select all
ERROR_ENVVAR_NOT_FOUND
    203 (0xCB)
    The system could not find the environment option that was entered.

Sollte bei dir nach Start des Skripts (natürlich ohne Setzen der Umgebungsvariable %comspec%!) dieselbe Meldung erscheinen, stimmt wirklich etwas mit der Definition der Variable nicht.

Grüße
Dalai
Dalai
 
Posts: 1041
Joined: 12.07.2016, 21:00

Re: Fehler #0 beim Aufruf Update.cmd

Postby rbr555 » 29.01.2018, 08:48

Hello,

C:\>"D:\autoit-v3\install\AutoIt3.exe" "D:\client\comspectest.au3"
---------------------------
@ComSpec & GetLastError
---------------------------
#C:\Windows\system32\cmd.exe#

0
---------------------------
OK
---------------------------

C:\>set comspec=
C:\>"D:\autoit-v3\install\AutoIt3.exe" "D:\client\comspectest.au3"
---------------------------
@ComSpec & GetLastError
---------------------------
##

203
---------------------------
OK
---------------------------

MfG
rbr555
rbr555
 
Posts: 22
Joined: 04.01.2013, 12:00

Re: Fehler #0 beim Aufruf Update.cmd

Postby Dalai » 29.01.2018, 17:42

Also liefert @ComSpec grundsätzlich den Inhalt doch sauber zurück. Mmh, der einzige relevante Unterschied zwischen WSUS Offline und dem Test-Skript, der mir ins Auge fällt, ist dieser Aufruf:
Code: Select all
If (@OSArch <> "X86") Then
        DllCall("kernel32.dll", "int", "Wow64DisableWow64FsRedirection", "int", 1)
      EndIf

Was kommt für eine Meldung, wenn du diesen Code-Teil in das Test-Skript übernimmst, z.B. so:
Code: Select all
#include <WinAPI.au3>

global $e=0
if (@ComSpec == "") then
    $e = _WinAPI_GetLastError()
EndIf

If (@OSArch <> "X86") Then
    DllCall("kernel32.dll", "int", "Wow64DisableWow64FsRedirection", "int", 1)
EndIf

global $s = StringFormat("#%s#", @ComSpec)

MsgBox(0, "@ComSpec & GetLastError", $s & @CRLF & $e)


Grüße
Dalai
Dalai
 
Posts: 1041
Joined: 12.07.2016, 21:00

Next

Return to Installation / Updating

Who is online

Users browsing this forum: No registered users and 10 guests