_Net_Share_ShareCheck - Rückgabewert

  • Nabend,

    keine Ahnung, ob ich hier richtig bin. Vielleicht ist es noch niemanden aufgefallen, aber die o.g. Funktion von NetShare.au3 hat, egal ob die Freigabe bereits besteht oder nicht, immer den gleichen Rückgabewert. Nämlich -1. Ein Prüfen, ob die Freigabe existiert, ist somit nicht möglich. Laut Hilfe steht -1 für "Share does not exist.". In einem ausführlichen Test konnte jedoch das Gegenteil bewiesen werden.

    Gibt es eine Art Patch für die Datei NetShare.au3? Offensichtlich wird ja die Netapi32.dll benutzt, um an die Info zu kommen. Leider kenne ich mich mit dieser Schnittstelle nicht aus und kann somit auch nicht sagen, wo der Fehler im Aufruf

    DllCall("NetAPI32.dll", "int", "NetShareCheck", "wstr", $sServer, "wstr", $sShare, "int*", 0)

    liegt. Also wende ich mich an die Profis.

    Vielen Dank im voraus.

  • Hallo,
    interessanter Post.
    Exakt das selbe verhalten habe ich auch!

    Ich habe als $sServer sowohl Rechner im Netzwerk als auch meine Lokale Möhre bemüht.

    Als Werte wurde auch folgendes getestet:

    "\\<servername>"
    "<servername>"
    "<IP-Name>"
    "<servername>.<domain>.<toplevel-domain>"

    Nichts hat geholfen!

    Hat jemand vielleicht eine Idee?

    Viele Grüße

    Karlchen

  • Hi eigentlich gehört der Post in Hilfe & Unterstützung aber man kann Ihn ja verschieben. ;)

    Also ich habe das jetzt getestet.
    Ich muß sagen, das es bei mir funktioniert. Ich benutzte aber noch die Version v3.2.10.0 also keine Ahnung ob es in der neuen anders ist.

    Spoiler anzeigen
    [autoit]


    ; In $sShareName darf nur einfach der Name de Verzeichnisse.
    ; $sServer kann auch leer bleiben dann ist es der locale PC sonst z.B. mit " "PC1" undes geht.
    #include <NetShare.au3>
    #include <array.au3>
    Dim $iMemo
    Dim $sShareName = "Test"
    if _Net_Share_ShareCheck(@ComputerName,$sShareName) = -1 Then
    msgbox(0,"","Share not exists")

    Else
    msgbox(0,"","Share exists")
    EndIf
    $aInfo = _Net_Share_ShareGetInfo (@ComputerName,$sShareName)
    _ArrayDisplay($aInfo,"")

    [/autoit]

    Aber bei mir hat es funktioniert.

    EDIT: Nur Linux Freigaben kann er net.

    MfG
    Der_Doc

  • Jetzt laus mich der Affe... ;)
    Habe auch 3.2.10.0 und es tut nicht...

    Ich habe jetzt mal deinen Code verwendet.

    Interessant:
    Ich bekomme die Meldung, dass das share nicht existiert.

    Dein ArrayDisplay() gibt mir aber alle share-details (also auch den Sharenamen case insensitve und auf welchen pfad es gemapt ist) aus 8| :huh:

    Das soll einer verstehen...

    Gruß

  • Ich weis jetzt nicht was "_Net_Share_ShareCheck" besser kann, aber ich prüfe das Vorhandensein von Netzwerkfreigaben einfach wie folgt:

    [autoit]

    $pc = "PC1"
    $Share = "Freigabe1"
    If FileExists("\\" & $pc & "\" & $share) Then Msgbox(0,"","Existiert")

    [/autoit]

    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"

  • @Micha he
    "_Net_Share_ShareCheck" kann folgende Werte zurück geben. Ich selber brauche die Funktion auch net.

    Return Value
    Success: Type of the shared device. Can be a combination of:
    -1 - Share does not exist
    $STYPE_DISKTREE - Print queue
    $STYPE_PRINTQ - Disk drive
    $STYPE_DEVICE - Communication device
    $STYPE_IPC - IPC
    $STYPE_SPECIAL - Special share reserved for IPC$ or remote administration of the server
    $STYPE_TEMPORARY - A temporary share

    Der Download Name muß genauso geschrieben werden wie die Freigabe heißt. Du kannst ja das Verzeichnis C:\Download auch als "Test" freigeben, dann muß der $sShareName = "Test" heißen. Mit den " . Als PC wie gesagt funktioniert zum testen auch @ComputerName sonst den Namen auch in " schreiben.

    Wenn die Rechte passen, und du alles richtig geschrieben hast, dann sollte es eigentlich passen.

    Welches Betriebssystem nutzt du denn? Vieleicht spielt das eine Rolle.

    Ob die Freigabe existiert kannst du auch rausfinden wenn du beim Explorer in die Adresszeile \\<IP oder Pc-Name>\<Freigabe> eingibst.

    MfG
    Der_Doc

  • Hi,
    also lokal ists XP Professional
    Im Netz Server 2003

    Und rechte-mäßig bin ich praktisch "Gott" ;)

    Mein aktueller Workaround:
    Local $dir_status = DirGetSize ($drive_letter)

    Das tut's auch... ist halt alles aber nicht "elegant" :rolleyes: