Entwickler-Ecke

Internet / Netzwerk - Netzwerkpfad eines freigegebenen Ordners ermitteln


Hendrik - Mi 02.01.08 00:21
Titel: Netzwerkpfad eines freigegebenen Ordners ermitteln
Hey!

Bitte steinigt mich, wenn es diese eigentlich einfache Frage schonmal gab, aber ich hab jetzt in der letzten halben Stunde gesucht und nix gefunden :?

Wie kann ich denn den Netzwerkpfad eines freigegebenen Ordners herausfinden. Genauer gesagt des Ordners in dem meine Exe-Datei liegt?


Narses - Mi 02.01.08 00:34
Titel: Re: Netzwerkpfad eines freigegebenen Ordners ermitteln
Moin!

user profile iconHendrik hat folgendes geschrieben:
Wie kann ich denn den Netzwerkpfad eines freigegebenen Ordners herausfinden. Genauer gesagt des Ordners in dem meine Exe-Datei liegt?
:gruebel: Den Namen einer Freigabe legst du doch selbst fest, wieso solltest du also Probleme haben, den ermitteln zu müssen?! :nixweiss:

Allgemein wird Freigaben der Hostname (besser) oder auch die IP-Adresse (notfalls) vorangestellt, z.B. so:

Quelltext
1:
2:
\\server\freigabe\Meine.exe
\\192.168.0.1\share\Meine.exe
Das kannst du genauso verwenden, wie

Quelltext
1:
C:\MeinFreigegebenerOrdner\Meine.exe                    

(vorausgesetzt, der aktuelle Benutzer hat Rechte, um aus dem Share zu lesen)

cu
Narses


Hendrik - Mi 02.01.08 23:54

Jaja das ist schon klar! Es geht mir eben drum, dass das Programm das selbst ermittelt und der Benutzer es nicht selbst eingeben muss. Es handelt sich dabei um eine Serveranwendung, die diesen Pfad über TCP an die Clients schickt und diese dann auf Dateien in dem Pfad zugreifen...


Narses - Mi 02.01.08 23:59

Moin!

Du möchtest also praktisch die Ausgabe von net share auswerten, richtig? Dann stellt sich immernoch die Frage, wie dein Programm mit den (unbekannten) Shares von anderen Leuten umgehen soll - woran willst du denn die "richtige" Freigabe erkennen? :gruebel:

cu
Narses


Hendrik - Do 03.01.08 15:27

Hi!

Dann mache ich es nochmal ausführlicher:
Auf Rechner 1 (Server) liegt die Exe um die es geht und einige weitere definierte Dateien, die mit dem Setup dort abgelegt werden. Rechner 2 (Client) verbindet sich über TCP in einem LAN mit Rechner 1, welcher über TCP dann den entsprechenden Netzwerkpfad schickt. Nun greift Rechner 2 auf die definierten Dateien zu. Dass der User zunächst den Ordner freigeben muss ist klar. Bisher habe ich es so gemacht, dass der Ordner auf dem Server manuell eingegeben werden muss, würde es aber gerne verbesseren, damit es automatisch geschiet.


Narses - Do 03.01.08 15:42

Moin!

user profile iconHendrik hat folgendes geschrieben:
Auf Rechner 1 (Server) liegt die Exe um die es geht und einige weitere definierte Dateien, die mit dem Setup dort abgelegt werden. Rechner 2 (Client) verbindet sich über TCP in einem LAN mit Rechner 1, welcher über TCP dann den entsprechenden Netzwerkpfad schickt.
Warum schickst du nicht gleich alle Daten (Dateien) über diese TCP-Verbindung, das ist doch eigentlich die logische Lösung für das Problem. :idea: ;)

user profile iconHendrik hat folgendes geschrieben:
Dass der User zunächst den Ordner freigeben muss ist klar. Bisher habe ich es so gemacht, dass der Ordner auf dem Server manuell eingegeben werden muss, würde es aber gerne verbesseren, damit es automatisch geschiet.
user profile iconNarses hat folgendes geschrieben:
Dann stellt sich immernoch die Frage, wie dein Programm mit den (unbekannten) Shares von anderen Leuten umgehen soll - woran willst du denn die "richtige" Freigabe erkennen?
Vielleicht war das ja wirklich missverständlich, also nochmal ausführlich: :?

Wenn der Benutzer deiner Software den Share einrichtet, woran will dein Programm denn erkennen, welchen er eingerichtet hat?! :nixweiss:

cu
Narses


Hendrik - Do 03.01.08 15:46

user profile iconNarses hat folgendes geschrieben:
Wenn der Benutzer deiner Software den Share einrichtet, woran will dein Programm denn erkennen, welchen er eingerichtet hat?! :nixweiss:


Dazu wollte ich ja wissen, ob es geht! Wenn das nichts wird, dann geht es eben nicht...

Und: Ein Senden der Dateien wäre mehr als unpraktisch, da diese u.U. mehrmals pro Sekunde geändert werden, ein Zugriff aber durchaus nur einmal pro Stunde erfolgt.

Moderiert von user profile iconNarses: Leerzeilen im Zitat entfernt


jakobwenzel - Do 03.01.08 15:48

Dann verschick die Daten doch nur auf Nachfrage (=wenn sie benötigt werden).


Narses - Do 03.01.08 15:51

Moin!

user profile iconHendrik hat folgendes geschrieben:
Dazu wollte ich ja wissen, ob es geht! Wenn das nichts wird, dann geht es eben nicht...
Es geht bei deinem Problem doch gar nicht um die Möglichkeiten, die Shares zu ermitteln (siehe net share, da geht´s ja auch), sondern darum, dass du ein nicht lösbares, logisches Problem hast: du weißt in der Software nicht, welchen Share der Benutzer angelegt hat, kannst ihn also auch nicht automatisch ermitteln... :nixweiss: :idea: ;)

user profile iconHendrik hat folgendes geschrieben:
Und: Ein Senden der Dateien wäre mehr als unpraktisch, da diese u.U. mehrmals pro Sekunde geändert werden, ein Zugriff aber durchaus nur einmal pro Stunde erfolgt.
Du brauchst ja auch nur bei einem Login die Daten (Dateien) zu senden. ;)

cu
Narses


Hendrik - Do 03.01.08 21:02

Dann sehen wir das mal als beantwortet an...


jaenicke - Do 03.01.08 22:34

user profile iconNarses hat folgendes geschrieben:
user profile iconHendrik hat folgendes geschrieben:
Dazu wollte ich ja wissen, ob es geht! Wenn das nichts wird, dann geht es eben nicht...
Es geht bei deinem Problem doch gar nicht um die Möglichkeiten, die Shares zu ermitteln (siehe net share, da geht´s ja auch), sondern darum, dass du ein nicht lösbares, logisches Problem hast: du weißt in der Software nicht, welchen Share der Benutzer angelegt hat, kannst ihn also auch nicht automatisch ermitteln... :nixweiss: :idea: ;)
Das ist aber auch gar nicht wichtig ;-). Es reicht ja, wenn ich eine Freigabe finde, die auf das entsprechende Verzeichnis zeigt. Es dürfte nicht so einfach möglich sein, dass zwei Freigaben auf das gewünschte Verzeichnis (hier das der ausführbaren Datei des Programms) verweisen, aber selbst wenn es so wäre, reicht es ja eine davon zu kennen.
(So habe ich die Frage jedenfalls verstanden.)

Nun kannst du die Liste der Freigaben zum Beispiel per Aufruf von net share und Auswertung der Ausgabe [http://www.dsdt.info/tipps/?id=637] oder über die LAN Manager API direkt bekommen. Die passende API Funktion müsste WNetEnumResource [http://msdn2.microsoft.com/en-us/library/aa385449.aspx] sein. Ich kann das ggf. auch noch einmal genauer schreiben.


Narses - Do 03.01.08 22:54

Moin!

user profile iconjaenicke hat folgendes geschrieben:
Es reicht ja, wenn ich eine Freigabe finde, die auf das entsprechende Verzeichnis zeigt. Es dürfte nicht so einfach möglich sein, dass zwei Freigaben auf das gewünschte Verzeichnis (hier das der ausführbaren Datei des Programms) verweisen
Ja, das könnte gehen. Was allerdings zwingend voraussetzt, dass der Anwendung der lokale Pfad der Freigabe implizit bekannt ist. :zwinker: Allgemein gesehen ist das eine logische Sackgasse. ;)

cu
Narses


jaenicke - Do 03.01.08 22:59
Titel: Re: Netzwerkpfad eines freigegebenen Ordners ermitteln
user profile iconNarses hat folgendes geschrieben:
Was allerdings zwingend voraussetzt, dass der Anwendung der lokale Pfad der Freigabe implizit bekannt ist. :zwinker: Allgemein gesehen ist das eine logische Sackgasse. ;)
user profile iconHendrik hat folgendes geschrieben:
Wie kann ich denn den Netzwerkpfad eines freigegebenen Ordners herausfinden. Genauer gesagt des Ordners in dem meine Exe-Datei liegt?
;-)


Narses - Do 03.01.08 23:06

Moin!

Was wiederum implizit voraussetzt, dass es sich um die Exe des Delphi-Projekts handelt. :idea: Es könnte ja auch eine andere Exe sein... :D

cu
Narses