run - Befehl mit Fehlermeldung

  • Hallo,

    bei der Ausführung des Run-Befehls verweigert dieser seine Aufgabe mit der Fehlermeldung, das er den Pfad/ Datei nicht gefunden hat bzw. bricht ohne Gründe ab.
    Unterschiedliche User sollen beim Aufruf des Scriptes (als Exe) das Programm "Irfanview" von einem Netzlaufwerk installiert bekommen. Auf dem Netzlaufwerk hat das Script für den Zeitraum der Installation sogar Schreibrechte und die Installation selbst wird auf dem PC mit Adminrechten ausgeführt (RunAS).

    Hier ein Ausschnitt aus dem Script. Das Netzlaufwerk B ist verbunden und der Ordner "Irfanview" ist auch händisch erreichbar.

    Vielleicht liegt hier das Problem am "WorkingDir", das ich leer gelassen habe?

    [autoit]


    Func Irfanview();installiert Irfanview
    WinMinimizeAll()
    ; Set the RunAs parameters to use local adminstrator account
    ; Declare all variables used
    Dim $Username, $Password

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

    ; Initialization of the variables
    $Username = "Administrator"
    $Password = "**********"

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

    ; Set the RunAs parameters to use local adminstrator account
    RunAsSet($Username, @Computername, $Password)
    ;Irfanview
    run ("B:\Irvanview\iview398.exe", "")
    ; Setup starten
    ; Willkommen zur IrfanView Installation!
    WinWait("IrfanView Setup")
    WinActivate("IrfanView Setup")

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

    .
    .
    .
    .
    .

    [/autoit]
  • D A N K E !!!

    Funktioniert jetzt wunderbar.

    Da ich schon mal einen Spezialisten da habe, zwei kleine Fragen:

    Wie bekomme ich bei Thema hier im Forum das "gelöst" hin?

    Und zu AutooIt:

    Wie bekomme ich es am elegantesten gelöst, wenn das Laufwerk B schon verbunden ist?
    Bzw. es gibt ja eine Möglichkeit, einen freien Laufwerksbuchstaben auszuwählen.
    Aber wie finde ich ihn dann per Script heraus, welcher verbunden wurde und verbinde es dann????

    Hier mein bisher einfaches Script....

    [autoit]


    Func Mappen();Laufwerk B:\172.29.51.185\Install wird gemapped
    WinMinimizeAll()

    ; Verbindet das Laufwerk B nach \\172.29.51.185\install mit dem user Install und dem passwort "install"
    DriveMapAdd("B:", "\\172.29.51.185\Install", 0, "install", "install")

    MsgBox(64, "Installation", "Das Laufwerk B:\Install wurde verbunden.")

    [/autoit][autoit][/autoit][autoit][/autoit][autoit][/autoit]
    • Offizieller Beitrag

    Bitte schön :)

    @Lösen: Sollte gehen, indem du deinen ersten Beitrag editierst. Sonst mache ich es gleich.

    @B: Man könnte sich mal die Drive...-Funktionen anschauen, damit kann man vermutlich rausfinden, was für ein Laufwerk an B hängt. Ansonsten könnte man mit FileExists auf eine charakteristische Datei prüfen. Oder habe ich dich falsch verstanden?

    petehebee

  • Danke.

    Gun-Food : Bitte den Thread " [ offen ] Func nacheinander starten" als gelöst markieren. Werde nun doch alle einzelnen Funktionen in einer extra Funktion vereinen. Ist zwar somit sehr unübersichtlich, aber noch klein genug...

    Hier meine geistigen Ergüsse mit der Bitte um Überprüfung. Mit der Variablen bin ich mir nicht so sicher.

    [autoit]


    Func Mappen();Laufwerk B:\172.29.51.185\Install wird gemapped
    WinMinimizeAll() ;alle Fenster minimieren
    DIM $x ;legt $x als Variable fest
    Global $x ;definiert die Variable $x als globale Variable zur Nutzung in anderen Funktionen (Installationsbuchstabe, z.B.: $x:\Irfanview)

    ; Verbindet einen freien Laufwerksbuchstaben $x (als Variable nach) mit \\172.29.51.185\install mit dem User Install und dem Password "install"
    DriveMapAdd("*", "\\172.29.51.185\Install", 0, "install", "install")

    ;ermittel den Laufwerksbuchstaben für den Pfad und weise ihm die Variable zu
    If DriveMapGet("\\172.29.51.185\Install")=$x @error Then
    MsgBox(48; "Fehler", "Der LW-Buchstabe konnte nicht ermittelt werden")
    EndIf

    MsgBox(64, "Installation", "Das Laufwerk $x wurde verbunden.")
    EndFunc

    [/autoit][autoit][/autoit][autoit][/autoit]
    • Offizieller Beitrag

    Hi,

    wird nicht gehen.

    Probier mal :

    [autoit]

    Func Mappen();Laufwerk B:\172.29.51.185\Install wird gemapped
    WinMinimizeAll() ;alle Fenster minimieren
    ; Verbindet einen freien Laufwerksbuchstaben $x (als Variable nach) mit \\172.29.51.185\install mit dem User Install und dem Password "install"
    If DriveMapAdd("*", "\\172.29.51.185\Install", 0, "install", "install") = 0 Then MsgBox(48, "Fehler", "Mapping")
    ;ermittel den Laufwerksbuchstaben für den Pfad und weise ihm die Variable zu
    Local $x = DriveMapGet("\\172.29.51.185\Install")
    If @error Then MsgBox(48, "Fehler", "Der LW-Buchstabe konnte nicht ermittelt werden")
    MsgBox(64, "Installation", "Das Laufwerk " & $x & "wurde verbunden.")
    EndFunc ;==>Mappen

    [/autoit]

    So long,

    Mega

  • Danke für die schnelle Hilfe.

    Kann ich die Variable

    [autoit]

    Local $x = DriveMapGet("\\172.29.51.185\Install")

    [/autoit]

    nicht auch als

    [autoit]

    Global $x = DriveMapGet("\\172.29.51.185\Install")

    [/autoit]

    nehmen. Somit wäre sie laut Hilfe in allen Funktionen anwendbar. --> Der ermittelte Laufwerksbuchstabe wird noch in anderen Funktionen zur Installation benötigt (weil vom Netzlaufwerk).

    • Offizieller Beitrag

    Hi,

    wie schon gesagt: Kannst du, aber dann würde ich die Variable zu Beginn des Skripts anlegen und mit "" initialisieren und dann in der Funktion nur noch die Zuweisung vornehmen. Das ist besserer Stil und vermeidet die Fehlermeldung bla possibly used before ...

    So long,

    Mega

  • Danke für den Tip.

    Habe die Variable nun als "Global $x" am Anfang des Script eingefügt, in der Hoffnung, das es nun zu keinerlei Fehlermeldugen kommt.

  • Habe die Variable $Lw (ehem. $x) als Gloabl am Anfang des Scripts festgelegt, weil immer wieder darauf zurückgegriffen werden soll.

    Heute morgen kam ich wieder zum Testen des Scripts und: es funktioniert nicht. In der Beschreibung des Befehls

    [autoit]

    Global $x = DriveMapGet("\\172.29.51.185\Install")

    [/autoit]

    darf nur der Laufwerksbuchstabe abgefragt werden, was aber leider eben nicht sofort ersichtlich war.

    Das würde dann so aussehen:

    [autoit]

    Global $x = DriveMapGet("X:")

    [/autoit]

    Da ich aber nun "X:" herausbekommen möchte, muss ich hier wieder mit Variablen arbeiten. Bei Zahlen ist das klar. Aber wie stelle ich es bei den Laufwerksbuchstaben von A - Z an?
    Jedesmal als eine extra Variable definieren? Und wie schaffe ich es mit einer Schleife (ggf. Do - Until)?

    Als Endergebnis muss auf jeden Fall der ermittelte Laufwerksbuchstabe der variablen $Lw zugewiesen werden.

  • Hier mal ein Entwurf zum besseren Verständnis...

    [autoit]

    Func Mappen();Laufwerk B:\172.29.51.185\Install wird gemapped
    WinMinimizeAll() ;alle Fenster minimieren
    Global $Buchstabe
    Dim $A = A, $B = B, $C = C, $D = D, $E = E, $F = F

    ; Verbindet einen freien Laufwerksbuchstaben $Buchstabe (als Variable nach) mit \\172.29.51.185\install mit dem User Install und dem Password "install"
    DriveMapAdd("*", "\\172.29.51.185\Install", 0, "install", "install")
    ; nun die Abfrage, welcher Laufwrksbuchstaben vergeben wurde, um ihn in weiteren Funktionen zu verwenden

    ;ermittle den Laufwerksbuchstaben für den Pfad und weise ihm die Variable zu
    Select
    Case DriveMapGet("$A:") = "\\172.29.51.185\Install"
    $A = $Buchstabe
    MsgBox(0, "Das Installationsverzeichnis is mapped to", DriveMapGet("$A"))
    Case DriveMapGet("$B:") = "\\172.29.51.185\Install"
    $B = $Buchstabe
    MsgBox(0, "Das Installationsverzeichnis is mapped to", DriveMapGet("$B"))
    .
    .
    .
    Endselect

    [/autoit]

    Die Lösung mit DrivegetLabel hat die gleichen Einschränkungen wie DriveMapGet --> Es ist ja nicht der Laufwerksbuchstabe bekannt, der bei beiden angegeben sein muss....

    • Offizieller Beitrag

    Hi,

    hilft das?

    [autoit]

    Func Mappen();Laufwerk B:\172.29.51.185\Install wird gemapped
    WinMinimizeAll() ;alle Fenster minimieren
    Global $Buchstabe

    ; Verbindet einen freien Laufwerksbuchstaben $Buchstabe (als Variable nach) mit \\172.29.51.185\install mit dem User Install und dem Password "install"
    DriveMapAdd("*", "\\172.29.51.185\Install", 0, "install", "install")
    ; nun die Abfrage, welcher Laufwrksbuchstaben vergeben wurde, um ihn in weiteren Funktionen zu verwenden

    ;ermittle den Laufwerksbuchstaben für den Pfad und weise ihm die Variable zu
    For $i = 97 To 122
    If DriveGetLabel(Chr($i) & ":") = "LabelName" Then Return Chr($i) & ":"
    Next
    EndFunc ;==>Mappen

    [/autoit]

    So long,

    Mega

  • Danke für die schnelle Hilfe.

    Werde es aber erst morgen ausprobieren können.

    Bei deiner Variante ist es nun egal, ob DriveMapGet oder DriveGetLabel benutzt wird. Ggf. gibt es noch Unterschiede, wenn mehrere Gruppenlaufwerke auf einem Server, aber unterschiedlichen Shares liegen.

    Hier eine Lösung mit DriveMapGet.... mit der Hoffnung, das diese so funktioniert....

    [autoit]

    Func Mappen();Laufwerk B:\172.29.51.185\Install wird gemapped
    WinMinimizeAll() ;alle Fenster minimieren
    Global $i


    ; Verbindet einen freien Laufwerksbuchstaben $Buchstabe (als Variable nach) mit \\172.29.51.185\install mit dem User Install und dem Password "install"
    DriveMapAdd("*", "\\172.29.51.185\Install", 0, "install", "install")
    ; nun die Abfrage, welcher Laufwerksbuchstaben vergeben wurde, um ihn in weiteren Funktionen zu verwenden
    ;ermittle den Laufwerksbuchstaben für den Pfad und weise ihm die Variable zu
    For $i = 97 To 122
    If DriveGetMap(Chr($i) & ":") = "\\172.29.51.185\Install" Then Return Chr($i) & ":"
    Next
    MsgBox(64, "Installation", "Das Laufwerk " & $i & "wurde verbunden.")

    EndFunc ;==>Mappen

    [/autoit]

    Danke nochmal für die schnelle Hilfe. Finde, das das hier ein super Forum ist.

    Auf die Lösung mit dem Ascii-Code wäre ich garnicht gekommen.

    Mit der Ausgabe der Funktion "Return" wird die Variable als der Wahr-wert ausgegeben, wenn ich dies so richtig verstanden habe? Das heißt, die Variable $i kann als globale Variable definiert werden und dient in anderen Funktionen....

    • Offizieller Beitrag

    Hi,

    naja nicht ganz :

    Versuch es lieber so:

    Spoiler anzeigen
    [autoit]

    For $i = 97 To 122
    If DriveMapGet(Chr($i) & ":") = "\\view" Then MsgBox(0, "", Chr($i) & ":")
    Next

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

    Func Mappen1();Laufwerk B:\172.29.51.185\Install wird gemapped
    WinMinimizeAll() ;alle Fenster minimieren
    Global $Buchstabe
    ; Verbindet einen freien Laufwerksbuchstaben $Buchstabe (als Variable nach) mit \\172.29.51.185\install mit dem User Install und dem Password "install"
    DriveMapAdd("*", "\\172.29.51.185\Install", 0, "install", "install")
    ; nun die Abfrage, welcher Laufwerksbuchstaben vergeben wurde, um ihn in weiteren Funktionen zu verwenden
    ;ermittle den Laufwerksbuchstaben für den Pfad und weise ihm die Variable zu
    For $i = 97 To 122
    If DriveMapGet(Chr($i) & ":") = "\\172.29.51.185\Install" Then
    $Buchstabe = Chr($i) & ":"
    MsgBox(64, "Installation", "Das Laufwerk " & $i & "wurde verbunden.")
    ExitLoop
    EndIf
    Return 1
    Next
    Return 0
    EndFunc ;==>Mappen1

    [/autoit]

    Viel Glück morgen!

    Normalerweise definiert man keine globalen Variablen innerhalb einer Funktion. Sowas macht man am Anfang seines Skriptes. Return verläßt die Funktion und gibt den Wert zurück.

    Sprich MsgBox(0,"", _mappen()) würde den Return wert anzeigen.

    Ich habe dir oben mal etwas Code stehen lassen, damit du schnell testen kannst.

    So long,

    Mega

  • Danke wieder einmal für die sehr gute Unterstützung.

    Bin leider erst heute zum testen gekommen. Das Gruppenlaufwerk wird problemlos verbunden, es wird hierbei von Z nach A verbunden. Danach erscheint aber weder eine Erfolgs- noch Fehlermeldung.

    Keine Ahnung, was ich hier noch ändern muss. Bin kurz davor, immer den Buchstaben "B" zu verwenden, da er kaum gebraucht wird....