Hauptscript über zusätzliche exe starten, damit der User Adminrechte hat. Funktion FileFindFirstFile geht nicht

  • Hallo Zusammen,

    mein Hauptskript (exe) macht ein paar Datenbankabfragen, listet diese und kann auch sonst noch so ein paar Funktionen, die hier glaube ich nicht von Bedeutung sind.

    Dieses Hauptskript ist bei allen Usern unserer Domäne installiert.
    Da es Adminrechte (DOM) benötigt (RequireAdmin langt nicht) habe ich eine zusätzliche exe erstellt (Zusatzskript),
    die das Hauptskript mit den DomänenAdmin-Rechten startet.
    siehe nachfolgenden Code des Zusatzskript:

    Code
    RunAs ( "Administrator", "Domäne", "AdminKennwort", 1, "Hauptskript.exe", @WorkingDir)

    Jetzt habe ich eine Teilprogrammierung in meinem Hauptskript, welche auch funktioniert,
    aber leider nur, wenn ich Hauptskript.exe direkt starte.
    Wenn ich Hauptskript.exe über das Zusatzskript starte dann geht diese spezielle Programmierung nicht.

    Im Klartext:
    search1 und search2 haben den Wert -1 wenn ich über das Zusatzskript starte.
    Wenn ich das Hauptskript alleine starte finden sie die erste Datei.

    Übrigens hatte ich diese Problematik schon mal bei einer "Funktion",
    ich weiss aber leider nicht mehr welche.


    Vielen Dank vorab.

    Würde mich freuen, wenn einer Rat weiß

    Einmal editiert, zuletzt von Aducarab (12. Oktober 2011 um 13:04)

  • Morgen, ich frage mich wieso du überhaupt FindFirstFile einsetzt du brauchst es doch nicht.. so wie ich das sehe

    würde es doch auch ein FileExists auch tuen?

    [autoit]

    If FileExists $Pfad Then ...

    [/autoit]

    an dein Problem würde ich sowieso etwas anderes herran gehen und zwar

    mit FileListtoArray und ArraySearch > siehe Hilfe
    ich finde damit würde sich das ganze etwas einfacher lösen lassen, aber naja Ansichtssache

    Gruß Marvin

    • Offizieller Beitrag

    search1 und search2 haben den Wert -1 wenn ich über das Zusatzskript starte.
    Wenn ich das Hauptskript alleine starte finden sie die erste Datei.


    Das läßt vermuten, dass die Pfade nicht passen. Hast du diese eventuell relativ adressiert, oder verwendest du ein Pfadmakro (z.B. SkriptDir)? Wenn du in einer festen Umgebung arbeitest ist die Verwendung hardcodierter Pfade sinnvoller als eine relative Adressierung.
    Check doch mal deine Pfade auf Existenz (FileExists) und laß dir Fehler per MsgBox ausgeben, damit du die Ursache einkreisen kannst.

    • Offizieller Beitrag

    Das Arbeitsverzeichnis ist gerne mal das Problem bei sowas. Pfade ausgeben lassen, wie BugFix vorgeschlagen hat, ist der erste Schritt, um das einkreisen zu können.

    [autoit]

    FileGetLongName

    [/autoit]

    sollte dann noch mehr Klarheit schaffen können.

    Viel Erfolg,
    Johannes

  • Hey Leute,
    danke erst mal für die extrem schnellen Anworten!!!

    TopFit

    @BugFix & peethebee:
    FileExists liefert 0 und

    Zitat

    Fileexists geht also auch nicht


    FileGetLongName liefert den Pfad in der Form: U:\Pfad1\Pfad2\*.pdf


    Zitat

    FileGetLongName scheint dann ja zu gehen


    ????????


    Hier noch mal der Code (jetzt auch wie ich die Ordner-Informationen hole):

    Code
    Global  $Ordner1 = IniRead ( @ScriptDir & "\KoLookConf.ini", "Pfad1", "pfz", "Not found")
       Global  $Ordner2 = IniRead ( @ScriptDir & "\KoLookConf.ini", "Pfad2", "pfz", "Not found")
       _GUICtrlListView_DeleteAllItems($hDateiliste)
    
    If GuiCTRLRead($Input_PDF_Suche) <> "" Then
        $test1 = FileExists($Ordner1 &  GuiCTRLRead($Input_PDF_Suche) & ".pdf")
        $test2 = FileGetLongName ( $Ordner1 &  GuiCTRLRead($Input_PDF_Suche) & ".pdf" )
        MsgBox(48, "Achtung", $test1 & @CRLF  & $test2)
      EndIf

    In Input_PDF_Suche hab ich lediglich einen * eingegeben.

    Wenn ich Ordner1 und Ordner2 in einer MSGBox ausgebe, dann ist das Erg. korrekt!

    @ Protex

    Mit der Programmierung über Arrays bin ich angefangen,
    fand es so aber einfacher, weil ich aus dem ListView der Eintrag ins Clipboar kopieren will.
    Und dafür brauche ich Pfad und Datei.
    Geht sicherlich auch. Meinst du es ist besser?

  • Sind $Ordner1/$Ordner2 vielleicht Netzlaufwerke ?

    Zur Nutzung dieses Forum's, ist ein Übersetzer für folgende Begriffe unerlässlich:

    "On-Bort, weier, verscheiden, schädliges, Butten steyling, näckstet, Parr, Porblem, scripe, Kompletenz, harken, manuel zu extramieren, geckukt, würglich, excell, acces oder Compilevorgeng"

  • Jau, dass sind sie!
    Ist das ein Prob?

    Klar ist das ein Problem !

    Ein Netzlaufwerk ist immer nur unter dem Benutzer verfügbar, der es auch verbunden hat.

    Und wenn du etwas mit RunAs() oder "Ausführen als" gestartet hast, läuft die Anwendung unter eben diesem neuen Nutzer und der kennt diese Laufwerk nicht.

    Entweder UNC-Pfade nutzen, das Laufwerk erst im (Admin-)Script verbinden oder vor dem Ausführen (z.B. im Starter-Script) die notwendigen Dateien nach "@TempDir" kopieren und dann mit dem Folgescript dort verarbeiten.

    Zur Nutzung dieses Forum's, ist ein Übersetzer für folgende Begriffe unerlässlich:

    "On-Bort, weier, verscheiden, schädliges, Butten steyling, näckstet, Parr, Porblem, scripe, Kompletenz, harken, manuel zu extramieren, geckukt, würglich, excell, acces oder Compilevorgeng"