AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Delphi-PRAXiS - Lounge Betriebssysteme Netzlaufwerk verbunden, aber nicht bereit
Thema durchsuchen
Ansicht
Themen-Optionen

Netzlaufwerk verbunden, aber nicht bereit

Ein Thema von berens · begonnen am 25. Mai 2009 · letzter Beitrag vom 12. Nov 2015
Antwort Antwort
Seite 1 von 2  1 2      
berens

Registriert seit: 3. Sep 2004
434 Beiträge
 
Delphi 10.4 Sydney
 
#1

Netzlaufwerk verbunden, aber nicht bereit

  Alt 25. Mai 2009, 12:43
Hi!

Ein nervige Phänomen unter Windows XP (evtl. auch andere Versionen):

Ich habe ein Netzlaufwerk auf einen anderen PC verbunden, sagen wir U: = \\pc1\frei . Wenn nun pc1 neugestartet wird, kann ich später mit allen möglichen Windows-APIs nicht mehr auf diesen Ordner zugreifen, auch nachdem der pc1 schon lange wieder gestartet ist.

Beispiel (\\pc1\frei\1.txt existiert!):
if FileExists('u:\1.txt') then begin

wird niemals "true" sein.

Lasse ich diesen Befehl in einer Schleife oder mit einem Timer laufen, kommt erst dann "true" dabei raus, wenn ich im Windows-Explorer / Arbeitsplatz das Laufwerk doppelklicken, bzw. mir dessen Inhalt anzeigen lasse.

*zensiertes Fluchen*

Wie kann ich mit meinem Programm diese Funktion simulieren, bzw. welche APIs was auch immer muss ich aufrufen, damit die Dateien wieder verfügbar sind?


Weitere Info:
-DirectoryExists('U:\') = true, erst wenn das Netzlaufwerk getrennt wird ist es false.
-Ich kann das Netzlaufwerk nicht einfach "neu" verbinden, da das Programm nicht den Benutzernamen und das Passwort zum verbinden des Netzlaufwerks kennt
-den Effekt kann man nicht so einfach nachstellen, er passiert öfters mal "einfach so"
-der Effekt ist unabhängig von meinen Programmen, afaik können dann auch Befehle wie "dir" nicht in der Kommandozeile verwendet werden (bzw. liefern nix zurück) bis das Laufwerk angeklickt wurde
-Domäne oder nicht ist egal

Danke im Vorraus für Ideen.
  Mit Zitat antworten Zitat
paritycheck

Registriert seit: 8. Feb 2005
51 Beiträge
 
Delphi 2009 Professional
 
#2

Re: Netzlaufwerk verbunden, aber nicht bereit

  Alt 25. Mai 2009, 13:04
Das könnte daran liegen, das Windows aktive SMB Sessions Standardmäßig nach 15 Minuten trennt und diese dann erst wieder aktiviert wird wenn Du zB im Explorer auf das "verbundene" Laufwerk klickst. Bis Windows XP kann ich dir dafür ne Funktion anbieten, die API wurde allerdings bei Vista entfernt und ich habe bis jetzt auch noch keinen anständigen Ersatz finden können.

Delphi-Quellcode:
type
   TWNetRestoreConnectionW = function (hwndParent:HWND; lpDevice:PWideChar):DWORD; stdcall;

function ReconnectDrive(const path:string):DWORD;
var
   libhandle : HMODULE;
   func : TWNetRestoreConnectionW;
   driveW : WideString;
begin
   Result:= ERROR_EXTENDED_ERROR;
   driveW := ExtractFileDrive(path);
   if driveW='then
      Exit;

   libhandle := LoadLibrary('mpr.dll');
   Result := 0;
   if libhandle=0 then
      Exit;
   try
      func := TWNetRestoreConnectionW(GetProcAddress(libhandle, 'WNetRestoreConnectionW'));
      if Assigned(func) then
         Result := func(0, @driveW[1]);
   finally
      FreeLibrary(libhandle);
   end;
end;
Rückgabewerte und mehr Infos hier.
  Mit Zitat antworten Zitat
Benutzerbild von Bernhard Geyer
Bernhard Geyer

Registriert seit: 13. Aug 2002
17.197 Beiträge
 
Delphi 10.4 Sydney
 
#3

Re: Netzlaufwerk verbunden, aber nicht bereit

  Alt 25. Mai 2009, 13:04
Der Windows-Explorer hat vermutlich UserNamen/Passwort noch gespeichert und führt ein automatisches Reconnect durch. Das macht natürlich ein einfacher FilExists nicht. Du müsstest versuchen den Explorer (oder teile davon) fernsteuern. Evtl. ein "verstecktes" Starten einer Windows Explorer instanz mit öffnen des entsprechenden laufwerkts oder die TShell**-Controls entsprechend versteckt einsetzen.
Windows Vista - Eine neue Erfahrung in Fehlern.
  Mit Zitat antworten Zitat
berens

Registriert seit: 3. Sep 2004
434 Beiträge
 
Delphi 10.4 Sydney
 
#4

Re: Netzlaufwerk verbunden, aber nicht bereit

  Alt 25. Mai 2009, 13:14
Danke soweit für die Antworten.

Ja, mit ShellExecute könne ich einfach den Ordner meiner Daten (in diesem Fall: "U:\") als unsichtbares Fenster aufrufen und dann nach 10 Sekunden oder so dieses Fenster wieder schließen lassen. Hoffentlich mache ich dann auch das richtige Fenste zu, sonst geht dem Benutzer einfach der komplette Explorer zu

Mal schauen...
  Mit Zitat antworten Zitat
paritycheck

Registriert seit: 8. Feb 2005
51 Beiträge
 
Delphi 2009 Professional
 
#5

Re: Netzlaufwerk verbunden, aber nicht bereit

  Alt 25. Mai 2009, 13:34
Hm, da könntest Du Probleme mit einigen Virenscannern bekommen wenn Du mal eben so den Explorer killst.
Versuche doch mal ob es funktioniert wenn du Findfirst() mit dem Netzwerklaufwerk aufrufst.

Delphi-Quellcode:
var
  sr: TSearchRec;
begin
  FindFirst('z:\*.*', faAnyFile, sr);
  FindClose(sr);
  if FileExists('z:\datei.txt') then
     Showmessage('jap')
  else
     ShowMessage('');
end;
  Mit Zitat antworten Zitat
berens

Registriert seit: 3. Sep 2004
434 Beiträge
 
Delphi 10.4 Sydney
 
#6

Re: Netzlaufwerk verbunden, aber nicht bereit

  Alt 25. Mai 2009, 13:39
Ich versuche gerade nochmal, das Problem praktisch nachzustellen, dabei kommt folgendes heraus:

FileExists('U:\1.txt') liefert nicht false, sondern erstmal garnix zurück. D.h. das komplette Programm steht. Der TimeOut für die Funktion FileExists scheint bei über 5 Minuten zu liegen. (Einfach den anderen PC ausschalten, und das Programm hängt an der stelle. Es gibt also kein "False" zurück.)

Deshalb gehe ich davon aus, dass auch FindFirst/FindNext erstmal das Programm hängen lässt. Ich werde das gleich testen, sobald hier mal wieder was funktioniert. Ich bin ggf. durchaus auf ein Problem gestoßen, wenn die PCs verschiedene Benutzernamen / Passwörter haben, der Ordner aber für "Jeder" freigegeben ist (auch bei Sicherheitseinstellungen).

Mal schauen.

Edit 1: -gestrichen-
Edit 2: Also die Sitzungswiederherstellung auch unter anderen Anmeldedaten klappt, auch wenn die Sitzung einen Time-Out hatte. http://support.microsoft.com/kb/297684 . Ich kann das eigentliche Problem nicht nachstellen, kenne es aber nur zu gut.
  Mit Zitat antworten Zitat
paritycheck

Registriert seit: 8. Feb 2005
51 Beiträge
 
Delphi 2009 Professional
 
#7

Re: Netzlaufwerk verbunden, aber nicht bereit

  Alt 25. Mai 2009, 13:48
Zitat von berens:
Es scheint ein generelles Problem zu geben, wenn der freigebende PC eine Netzwerk/Sicherheitsfreigabe für "Jeder" hat, und dann mal kurz die Netzwerkverbindung verliert. Logon Problem?
Aber wenn Du im Explorer auf das Laufwerk klickst funktionierts?
  Mit Zitat antworten Zitat
berens

Registriert seit: 3. Sep 2004
434 Beiträge
 
Delphi 10.4 Sydney
 
#8

Re: Netzlaufwerk verbunden, aber nicht bereit

  Alt 25. Mai 2009, 14:24
^-- Zitat von meinem gestrichenen Edit 1 vom Beitrag vorher.

Ich habe die PCs mit Windows XP Pro irgendwie nicht über Datei- und Druckerfreigabe verbunden bekommen, wenn das Konto des einen PCs (benutzername: benutzer1 / passwort: 12345) nicht auf dem anderen PC vorhanden war (benutzername: benutzer2 / passwort: 23456).

Über Gastkonto hat das auch nicht geklappt. Das ist aber ein Windows-Problem, was jetzt nichts konkret mit dem aktuellen Problem zu tun hat.

Ich verbinde mich nun auf pc1 mit "net use \\pc1\frei /user:benutzer1 12345". Das klappt nun soweit, dass es generell geht, aber das von mit beschreibene Problem (dass der Inhalt des Laufwerks in Delphi nicht ermittelt werden kann), lässt sich immernoch nicht nachvollziehen oder lösen.

Ergo sollte das Problem nicht speziell mit den Anmeldedaten zu tun haben.
  Mit Zitat antworten Zitat
paritycheck

Registriert seit: 8. Feb 2005
51 Beiträge
 
Delphi 2009 Professional
 
#9

Re: Netzlaufwerk verbunden, aber nicht bereit

  Alt 25. Mai 2009, 14:38
Du solltest das Problem folgendermaßen nachvollziehen können.
Auf dem Server klickst Du bei verbundenem Netzwerklaufwerk unter Computerverwaltung -> Freigegebene Ordner -> Sitzungen rechts auf den Benutzernamen und dann Sitzung schliessen. Somit sollte das Netzwerklaufwerk Serverseitig getrennt sein so wie es nach 15min inaktivität auch von Windows selbst gemacht wird.

Ich hatte das mal so gelöst, das ich den Server erst angepingt habe, bei erreichbarkeit gecheckt habe ob das Programm auf XP läuft und dann og Funktion verwendet habe um alles wiederherzustellen. Für Vista funktioniert bei mir FindFirst()... meistens
  Mit Zitat antworten Zitat
berens

Registriert seit: 3. Sep 2004
434 Beiträge
 
Delphi 10.4 Sydney
 
#10

Re: Netzlaufwerk verbunden, aber nicht bereit

  Alt 25. Mai 2009, 14:45
Damit kann man wohl einen Fehler simulieren, wenn das Programm bereits läuft (so dass z.B. kurzzeitig Dateien nicht verfügbar sind oder neu geöffnet werden müssen), aber ich habe mit dem speziellen Fehler das Problem, wenn ich das Programm starte (und das Problem in Windows schon besteht, dass das Laufwerk "nicht reagiert", aber verbunden ist und beim anklicken auch den Inhalt zeigt und mein Programm dann weiterläuft).

Mit deinem provozierten "Fehler" hat mein Programm kein Problem (bzw. Windows selbst scheinbar auch nicht).

*confused*

Edit 1: Ja in der Tat! Ich versuche hier im Forum eine Lösung für ein Problem zu finden, dass ich garnicht habe ^^. Naja, aber als Programmierer kenn man glaube ich dieses Problem
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 13:17 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz