Linie 1102 (file "c:\install\appl\appl.exe") Error: Array variable has incorrect nummer of subscript...

  • Hallo zusammen

    Ich kämpfe mit einer mysteriösen Fehlermeldung:

    Linie 1102 (file "c:\install\appl\appl.exe") Error: Array variable has incorrect nummer of subscript or subscript dimension range exceeded..

    Mysteriös, weil die "Anwendung" unter Server 2003 und Server 2003 x64 erfolgreich getestet wurde - die Domain Mitglieder sind.

    Nun die gleichen Sourcen auf einem Workgroup 2003 Server verwendet - führt zu diesem Ergebniss ?(

    Das sind eigentlich Simple Exe Files, mit Fileinstall und Execute.. Ich hoffe ihr habt mir einen Tip, wo ich ansetzen könnte, ohne dass ich hier den Code von mehren Exe Files posten muss :pinch:

    Einmal editiert, zuletzt von Surfy (7. Dezember 2010 um 18:29)

    • Offizieller Beitrag

    Führe mal das Script aus Scite heraus aus, da bekommst du auch eine Fehlermeldung mit welcher du dann suchen kannst.
    Das Compilierte Scipt hat wesentlich mehr Zeilen durch die Includes und eine Fehlersuche gestaltet sich schwieriger.

  • 8|

    Herzlichen Dank für den Tip!


    [autoit]


    Func _getDOSOutput($command)
    Local $text = '', $Pid = Run('"' & @ComSpec & '" /c ' & $command, '', @SW_HIDE, 2 + 4)
    While 1
    $text &= StdoutRead($Pid, False, False) & @CR
    If @error Then ExitLoop
    Sleep(10)
    WEnd
    Return StringStripWS($text, 3)
    EndFunc ;==>_getDOSOutput

    [/autoit][autoit][/autoit][autoit]

    $nslookupread=(_getDOSOutput('nslookup %Computername%') & @CRLF)
    $nslookupwork = StringSplit (StringStripCR ($nslookupread), @LF)
    $nslookupcontent = $nslookupwork[4]

    [/autoit][autoit][/autoit][autoit][/autoit]

    appl.au3 (41) : ==> Array variable has incorrect number of subscripts or subscript dimension range exceeded.:


    Zeile 13 ist die (41) im Script... Weiss jemand, wieso diese "manchmal" aneckt 8o

  • Lass die mal in einer msg $nslookupread ausgeben. Scheint so als würde nslookup manchmal nicht richtig arbeiten und dadurch StringSplit den Array nicht richtig erstellen.

    Andy hat mir ein Schnitzel gebacken aber da war ein Raupi drauf und bevor Oscar das Bugfixen konnte kam Alina und gab mir ein AspirinJunkie.

    • Offizieller Beitrag
    [autoit]

    $nslookupread=(_getDOSOutput('nslookup %Computername%') & @CRLF)

    [/autoit]


    Schlägt fehl deshalb liefert

    [autoit]

    $nslookupwork = StringSplit (StringStripCR ($nslookupread), @LF)

    [/autoit]


    kein Array oder zumindest nicht die richtige Anzahl von Elementen zurück.

  • aua, wie recht du hast - herzlichen Dank!


    Zitat


    C:\WINDOWS\system32>nslookup %computername%
    Server: ns.mydomain.com
    Address: 192.103.67.30

    *** ns.mydomain.com can't find servername: Non-existent domain

    C:\WINDOWS\system32>


    Mein Problem ist, dass ich herausfinden muss, in welcher Domain sich der Server befindet. Das kann mydomain.dev, oder mydomain.com oder myotherdomain.com subdomain.mydomain.com etc sein.

    Ich verarbeite das ganze dann relativ arm äh billig ala

    If StringInStr( $nslookupcontent, "mydomain.com") Then

    Funktionieren tut das anscheinend in der Domain wunderbar, aber dann in der Workgroup nicht mehr.. Ziel wäre, dass eine Exe überall einsetzbar wäre, egal in welcher Domain.

    :cursing:

  • Und warum nimmst dann nicht

    [autoit]

    @LogonDNSDomain

    [/autoit]

    Andy hat mir ein Schnitzel gebacken aber da war ein Raupi drauf und bevor Oscar das Bugfixen konnte kam Alina und gab mir ein AspirinJunkie.

  • Weil einige der Server so richtig schief drin hängen.. Auch unter

    HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters "Domain" ist nicht zuverlässig erkennbar, in welcher Subdomain die Kisten hängen :cursing:

    Wie kann ich diese Abfrage hier in Zeile 13 umbauen, dass nur Zeile 4 ausgewertet wird, falls diese auch vorhanden ist?

    [autoit]

    Func _getDOSOutput($command)
    Local $text = '', $Pid = Run('"' & @ComSpec & '" /c ' & $command, '', @SW_HIDE, 2 + 4)
    While 1
    $text &= StdoutRead($Pid, False, False) & @CR
    If @error Then ExitLoop
    Sleep(10)
    WEnd
    Return StringStripWS($text, 3)
    EndFunc ;==>_getDOSOutput

    [/autoit][autoit][/autoit][autoit]

    $nslookupread=(_getDOSOutput('nslookup %Computername%') & @CRLF)
    $nslookupwork = StringSplit (StringStripCR ($nslookupread), @LF)
    $nslookupcontent = $nslookupwork[4]

    [/autoit]


    Diese Fehlermeldung ist ja echt unschön...

    2 Mal editiert, zuletzt von Surfy (7. Dezember 2010 um 16:50)

  • So:

    Spoiler anzeigen
    [autoit]

    Func _getDOSOutput($command)
    Local $text = '', $Pid = Run('"' & @ComSpec & '" /c ' & $command, '', @SW_HIDE, 2 + 4)
    While 1
    $text &= StdoutRead($Pid, False, False) & @CR
    If @error Then ExitLoop
    Sleep(10)
    WEnd
    Return StringStripWS($text, 3)
    EndFunc ;==>_getDOSOutput

    [/autoit] [autoit][/autoit] [autoit]

    $nslookupread = (_getDOSOutput('nslookup %Computername%') & @CRLF)
    $nslookupwork = StringSplit(StringStripCR($nslookupread), @LF)
    If ($nslookupwork[0] > 3) Then
    $nslookupcontent = $nslookupwork[4]
    EndIf

    [/autoit]

    Andy hat mir ein Schnitzel gebacken aber da war ein Raupi drauf und bevor Oscar das Bugfixen konnte kam Alina und gab mir ein AspirinJunkie.