AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren

ShellExecute mit Netzlaufwerk

Ein Thema von sintronic86 · begonnen am 8. Apr 2014 · letzter Beitrag vom 10. Apr 2014
Antwort Antwort
Seite 1 von 2  1 2   
sintronic86

Registriert seit: 7. Dez 2009
Ort: Barsinghausen
90 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#1

ShellExecute mit Netzlaufwerk

  Alt 8. Apr 2014, 14:38
Hallo Community,

ich mal wieder. Ich stehe gerade vor einem Problem.

Situation:
In der Firma liegt auf dem Server ein Ordner, in welchem Daten zu Projekten abgelegt sind.
Ein solcher Ordner existiert auch auf einem über WebDAV erreichbaren Server, auf welchen ich ein
Netzlauwerk gemappt habe (Z:\);

Das auslesen des Ordners auf dem firmeninternen Server funktioniert super.
Aber der Zugriff auf den Ordner im gemappten Laufwerk funktioniert nicht. Da liefert mir ShellExecute immer den
Code 3 ("The specified path was not found.") zurück. Ironischerweise nur dann, wenn hinter dem "Z:" noch mehr Pfad folgt (Bsp: "Z:\Projects\123).
Den Pfad "Z:" öffnet er ohne Probleme.

Ich habe zwar schon viel gegoogelt und einige Lösungsvorschläge versucht, aber es war noch nicht das richtige dabei.

Hat einer von euch eine Ahnung wie ich den Zugriff bewerkstelligen kann?

Besten Dank im Voras
Björn
  Mit Zitat antworten Zitat
Benutzerbild von Dalai
Dalai

Registriert seit: 9. Apr 2006
1.637 Beiträge
 
Delphi 5 Professional
 
#2

AW: ShellExecute mit Netzlaufwerk

  Alt 8. Apr 2014, 15:35
Wurde das Netzlaufwerk mit einem anderen Nutzer(konto) verbunden als deine Software läuft? Netzlaufwerke unter Windows sind (seit Win2k) nutzerspezifisch (seit Vista spielt da noch die UAC mit rein).

MfG Dalai
  Mit Zitat antworten Zitat
Benutzerbild von Guido R.
Guido R.

Registriert seit: 5. Jul 2007
136 Beiträge
 
Delphi 10.2 Tokyo Enterprise
 
#3

AW: ShellExecute mit Netzlaufwerk

  Alt 8. Apr 2014, 17:05
Hi !

Startest Du Dein Programm mit erhöhten Rechten (als Administrator ausführen) ? - Es könnte sein, dass für den Admin andere Laufwerksmappings vorhanden sind, als für den "normalen" User.
Wenn Z:\ für User und Admin mit jeweils unterschiedlichen Freigaben verknüpft ist, dann können beide auf Z:\ zugreifen, aber auf Grund unterschiedlicher Verzeichnisstruktur nicht auf ein best. Unterverzeichnis.
Ggf. kann Dir auch Tante Google mit dem Stichwort "EnableLinkedConnections" weiterhelfen.

Gruß
Guido R.
  Mit Zitat antworten Zitat
sintronic86

Registriert seit: 7. Dez 2009
Ort: Barsinghausen
90 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#4

AW: ShellExecute mit Netzlaufwerk

  Alt 10. Apr 2014, 10:24
@Dalai:
Oh man, wie erkläre ich das? Um die Ordnerstruktur auslesen zu können, verbinde ich während der Programminstanz dieses Laufwerk erneut unter einem anderen Laufwerksbuchstaben (bsw. K:\), wodurch ein Dialog aufploppt, der die LoginDaten wissen will. Dann lese ich die Ordnerstruktur aus und trenne das Laufwerk wieder (alles silent, also für den Nutzer nicht sichtbar).
So funktioniert der Zugriff auch. Ich liste dann die Ordnerstrukur in einem TTreeView auf (nur bestimmte Ordner, nicht alle) indem ich den Pfad "K:\..." nehme und das "K" gegen das "Z" austausche und möchte dann diese Ordner per Doppelklich auf den Eintrag öffnen (ShellExecute).

Das Netzlaufwerk ("Z") wurde mit bestimmten Zugangsdaten verbunden. Mir ist aber nicht bewusst, dass mein Programm welche hinterlegt haben sollte. Für gewöhnlich muss ich, wenn ich das Laufwerk manuell im Explorer öffnen möchte, meine Daten eingeben.


@Guido R.:
Ich habe sowohl das normale Starten als auch das Starten als Admin versucht, aber es ändert leider nichts. Kann ich denn dem ShellExecute auch LoginDaten mitgeben?
Björn
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
40.503 Beiträge
 
Delphi 11 Alexandria
 
#5

AW: ShellExecute mit Netzlaufwerk

  Alt 10. Apr 2014, 10:47
Es kann ntürlich sein, dass ShellExecute/ShellExecuteEx (absichtlich) nicht auf Logindaten prüft, bzw. keine Rückmeldung zum Benutzer integriert hat.

Aber wenn du eh bereits einen Code zum Verbinden des Laufwerks hast, dann könntest du den doch benutzen? (mit eigenem Passwortabfragedialog)
Was sagt denn der Fehlercode vom ShellExecute?


Du willst doch nur den Ordner öffnen?
Dann wende dich doch direkt an den Explorer und sag dem per Parameter, welchen Pafd er öffnen/anzeigen soll. (ist nur etwas blöd, wenn der Explorer nicht der Standard-Dateibrowser ist)
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list

Geändert von himitsu (10. Apr 2014 um 10:49 Uhr)
  Mit Zitat antworten Zitat
sintronic86

Registriert seit: 7. Dez 2009
Ort: Barsinghausen
90 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#6

AW: ShellExecute mit Netzlaufwerk

  Alt 10. Apr 2014, 11:04
Zitat:
Es kann ntürlich sein, dass ShellExecute/ShellExecuteEx (absichtlich) nicht auf Logindaten prüft, bzw. keine Rückmeldung zum Benutzer integriert hat.
Und ich kann der procedure keine Daten hinterlegen?


Zitat:
Was sagt denn der Fehlercode vom ShellExecute?
Der Rückgabewert ist "3", was (laut meiner eigenen Suche?!?) "Verzeichnis wurde nicht gefunden" bedeutet.
Auch der Aufruf (SysUtils) FindFirst auf das Laufwerk liefert "3", also Pfad nicht gefunden zurück.


Zitat:
Du willst doch nur den Ordner öffnen?
Dann wende dich doch direkt an den Explorer und sag dem per Parameter, welchen Pafd er öffnen/anzeigen soll.
Das ist korrekt. Und wie mache ich das dann, wenn nicht mit shellexecute?
Björn
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
40.503 Beiträge
 
Delphi 11 Alexandria
 
#7

AW: ShellExecute mit Netzlaufwerk

  Alt 10. Apr 2014, 11:15
Und ich kann der procedure keine Daten hinterlegen?
Das geht nur, aufgerufene Programm Dieses als Parameter entgegen nimmt, oder wenn z.B. ein Server solche Daten in der Adresse/URL annimmmt (welches aber auch wieder aus eine art parameter hinaus geht).


"Verzeichnis wurde nicht gefunden" bedeutet.
OK, dann schaut daas Ding garnicht erst auf "eventuell" nachladbare Mappings/Laufverke.
Hatte gehofft der meint dann was von "Zugriff verweigert", so als wenn er versuchen würde sich ohne Logindaten zu verbinden.


Das ist korrekt. Und wie mache ich das dann, wenn nicht mit shellexecute?
Es bleibt bei Shellexecute, nur daß du eben nicht direkt die Datei aufrufst und somit sagst "Ey Windows, gibt das mal an das Standardprogramm weiter",
sondern direkt das Programm ansprichst, wo man dann auch zusätzliche Parameter mitgeben kann %windir%\explorer.exe mit z.B. "D:\Eigene Dateien" als Parameter (der Explorer kennt notfalls noch eine ganze Reihe an Steuerparametern)
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list
  Mit Zitat antworten Zitat
sintronic86

Registriert seit: 7. Dez 2009
Ort: Barsinghausen
90 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#8

AW: ShellExecute mit Netzlaufwerk

  Alt 10. Apr 2014, 11:45
Ich habe jetzt folgendes probiert:
ShellExecute(Application.Handle, nil, 'explorer.exe', PChar('Z:\'), nil, SW_NORMAL); -> funktioniert

ShellExecute(Application.Handle, nil, 'explorer.exe', PChar('Z:\Projects'), nil, SW_NORMAL); -> funktioniert nicht, er öffnet dann die "eigenen Dokumente" (Der Pfad "Z:\Projects" ist aber auf dem manuellen Weg im Explorer erreichbar)
Björn
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
40.503 Beiträge
 
Delphi 11 Alexandria
 
#9

AW: ShellExecute mit Netzlaufwerk

  Alt 10. Apr 2014, 12:29
Z:\Projects\ geht vermutlich auch nicht?
Das ist ein richtiges Verzeichnis? (keine Junction, Softlink, lokalisierte Pfadname oder Dergleichen)

Wenn der Explorer den Pfad nicht findet, dann springt/bleibt er in seinem normalen Startverzeichnis.

Und bei z.B. Leerzeichen/Sonderzeichen im Pfad nicht die " vergessen.
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list

Geändert von himitsu (10. Apr 2014 um 12:34 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von Dalai
Dalai

Registriert seit: 9. Apr 2006
1.637 Beiträge
 
Delphi 5 Professional
 
#10

AW: ShellExecute mit Netzlaufwerk

  Alt 10. Apr 2014, 13:53
@Dalai:
Oh man, wie erkläre ich das?
Am besten so, dass man es versteht .

Zitat:
Um die Ordnerstruktur auslesen zu können, verbinde ich während der Programminstanz dieses Laufwerk erneut unter einem anderen Laufwerksbuchstaben (bsw. K:\), wodurch ein Dialog aufploppt, der die LoginDaten wissen will. Dann lese ich die Ordnerstruktur aus und trenne das Laufwerk wieder (alles silent, also für den Nutzer nicht sichtbar).
Öhm, ploppt ein Dialog auf oder ist alles silent?

Zitat:
Das Netzlaufwerk ("Z") wurde mit bestimmten Zugangsdaten verbunden. Mir ist aber nicht bewusst, dass mein Programm welche hinterlegt haben sollte. Für gewöhnlich muss ich, wenn ich das Laufwerk manuell im Explorer öffnen möchte, meine Daten eingeben.
Wenn dein Programm keine Zugangsdaten hinterlegt hat, wie ist dann o.g. Vorgehensweise möglich, alles silent zu machen?

Weiterhin ist mir noch nicht klar, ob nun dein Programm mit einem anderen Nutzerkonto läuft als das Netzlaufwerk verbunden wurde. Nochmal: Netzlaufwerke sind nutzerspezifisch. Ein Netzlaufwerk, das als Hans verbunden wurde, ist von einem Programm, das als Willi läuft, nicht zugänglich. Ebenso ist (bei eingeschalteter UAC) ein Netzlaufwerk, das in einem elevated Prozess verbunden wurde, nicht für Programme zugänglich, die non-elevated laufen (und IIRC auch umgekehrt).

MfG Dalai
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2   

Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

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 14:42 Uhr.
Powered by vBulletin® Copyright ©2000 - 2022, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2021 by Daniel R. Wolf