Announcement

Collapse
No announcement yet.

FindFirst in Service-Applikation

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • FindFirst in Service-Applikation

    Hallo,

    ich habe ein kleines Problem mit der Funktion "FindFirst" in einer Delphi-Applikation, die als Dienst läuft.
    Hier versuche ich alle Textdateien in einem Verzeichnis zu finden und z.B. zu löschen.
    Dies funktioniert auch einwandfrei. Nur, wenn ich als Suchpfad ein Netzwerkpfad übergebe, funktioniert das alles nicht mehr.
    Nun habe ich schon herausgefunden, dass ein Netzlaufwerk so nicht funktioniert, da dieser an den Benutzer gebunden ist.
    Aber ein UNC-Pfad sollte ja eigentlich schon funktionieren...

    Code-Ausschnitt:

    Code:
    function fnDeleteFile (strPara1 : string; nPara1 : integer): integer;
    var
      nReturn           : integer;                  // Funktionsergebnis
      srDateien         : TSearchRec;               // Struktur mit Dateiinformationen
    begin
      nReturn := FindFirst (strPara1, faAnyfile - faDirectory, srDateien);
      if nReturn = 0 then  
      begin
        repeat                                                                      // solange suchen...
          if (srDateien.Name<>'.') and (srDateien.Name<>'..') then                  // Wenn nicht unterverzeichnis
          begin
          // Hier was mit den Dateien machen....
          end;
        until FindNext(srDateien)<>0;                                               // ...bis alle durch  
      end;
    end;

    Für strPara1 := 'D:\*.txt' funktionirt alles gut, ich bekomme alle Textdateien aus dem Verzeichnis.
    Für strPara1 := 'Y:\*.txt' (wobei Y: ein verbundenes Netzlaufwerk darstellt) funktioniert es nicht (nReturn = -1)
    Für strPara1 := '\\<PC-Name>\<Freigabe>\*.txt (wobei die Freigabe alle Rechte hat und auf Y: verweist auch nicht (nReturn = -1).

    Es muss irgendwas mit dem Dienst zu tun haben, da ich das Genze auch mal in eine "normale" Delphi-App eingebaut habe, wo alles (auch mit Netzlaufwerken und Freigaben) einwandfrei funktioniert...

    Über irgendeienn Tip wäre ich dankbar.

    Gruß, Mirko

  • #2
    Netzwerkpfade mit Laufwerksbuchsten funktionieren generell nicht da ja diese für den Dienst nicht sichbar sind (anderes konto etc.).

    Für Shares muss sich der Dienst entsprechend am Netzwerklaufwerk anmelden. Gibt's WinAPI-Funktionen dafür, jedoch weiss ich aktuell den Namen dieser nicht.

    Comment


    • #3
      Danke erstmal für die schnelle Antwort.
      Habe noch ein wenig in der Richtung gesucht.
      Bin auf folgende Variante gekommen:
      Code:
          nEnde := posex ('\',strPara1, posex ('\', strPara1, 3)+1) -1;             
          strFreigabe := copy(strPara1, 1, nEnde);      // \\<PCName>\<Freigabename>                              
          NetResource.dwType := RESOURCETYPE_ANY;
          NetResource.lpLocalName := '';
          NetResource.lpRemoteName := PChar (strFreigabe);
          NetResource.lpProvider := nil;
      
          nReturn := WNetAddConnection2 (NetResource, PChar(strPW), PChar(strUser), CONNECT_UPDATE_PROFILE);
      Dies liefert nun den Wert 1312 zurück.
      A specified logon session does not exist. It may already have been terminated.

      Mist, irgendwie finde ich auch hierzu keine brauchbaren Infos...
      Noch jemand ne Idee?? Hänge hier in de Luft...

      Gruß, Mirko

      Comment


      • #4
        OK, Kommando zurück. Habe das Problem gelöst.
        Habe im Forum etwas entscheidendes entdeckt:
        Der Username und das Passwort waren soweit korrekt, nur muss dem Usernamen noch der Rechnername vorangestellt werden.
        Wenn z.B die Verbindung zur Freigabe "\\TEST_PC\Temp" hergestellt werden soll, und die Freigabe mit User: 'Administrator' und Passwort: 'admin' erreichbar ist, muss als strUser "TEST_PC\Administrator" übergeben werden!!!

        Comment

        Working...
        X