Laden...

FileStream Access Denied bei Netzwerklaufwerk

Erstellt von backspeck42 vor einem Jahr Letzter Beitrag vor einem Jahr 445 Views
B
backspeck42 Themenstarter:in
35 Beiträge seit 2019
vor einem Jahr
FileStream Access Denied bei Netzwerklaufwerk

Hey Leute,

hier eine eigentlich einfach Frage. Ich möchte mit einer .Net-App (Console, getestet mit Framework und .net Core) auf ein Netzlaufwerk oder eine externe Festplatte schreiben, bekomme jedoch immer "Access Denied" in diesem Falle. Nur auf den internen Laufwerken meines Rechners geschiet das nicht. Im Explorer (oder anderen Anwendungen) habe ich die entsprechenden Rechte auf diese Pfade und kann auch schreiben!
Laufen .Net Anwendungen unter einem anderen Nutzer? Oder muss ich irgendwas vor dem Build der App konfigurieren?

Danke schon mal fürs Lesen,
LG...BS

T
2.219 Beiträge seit 2008
vor einem Jahr

Die Anwendung läuft mit dem Rechten des Benutzers der diese startet.
Entsprechend wäre die Frage wie der Code aussieht und ob du sicherstellst, dass alles vorhanden ist (Ordner).
Zeigt am besten mal den Code, dann kann man dies ggf. prüfen.

T-Virus

Developer, Developer, Developer, Developer....

99 little bugs in the code, 99 little bugs. Take one down, patch it around, 117 little bugs in the code.

16.806 Beiträge seit 2008
vor einem Jahr

Eine Anwendung in Windows läuft zwar unter dem Kontext des Benutzers, aber nicht zwangsläufig mit den vollen Rechten des Benutzers.
Das liegt daran, dass Windows seit Windows 7 mit dem Principle of least privilege fährt: also immer die geringsten Rechte wie möglich verwendet.
Daher kennt man seit Windows 7 auch das UAC-Fenster, das aufpoppt, wenn man mal höherwertige Rechte möchte.

Der Windows Explorer ist auch nichts anderes als eine Anwendung in Windows - der sich aber um sowas kümmert.
Nur also weil der Windows Explorer auf Dateien eines Netzwerks zugreifen kann, heisst das nicht, dass das jede andere Anwendung kann.

Das gilt für alle Anwendungen auf Windows, völlig egal ob C++, Java oder .NET.

Im Fall von Netzwerk-Laufwerken (UNC) kommt es maßgeblich darauf an, wie die Authentifizierung läuft.
Befindest Du Dich in einem Unternehmensnetzwerk, so wird i.d.R. der Active Directory User verwendet, was der Windows Explorer automatisch macht.
Befindest Du Dich in einem Heimnetzerk, musst Du Dich evtl. völlig individuell authentifizieren (Windows Explorer zeigt ein Login-Popup an für Network Credentials).
Wenn das Netzwerk-Share jedoch eingebunden ist, dann sollte das Credential Handling Windows automatisch machen.

Ich kenne aber auch Netzwerklaufe, bei denen musste man eine Session eröffnen (über WNetAddConnection2), um diese zu nutzen.
Netzwerklaufwerk ist also nicht gleich Netzwerklaufwerk.

Die Frage ist also: was hast Du für ein Netzwerklaufwerk, und wie versuchst Du drauf zuzugreifen.

B
backspeck42 Themenstarter:in
35 Beiträge seit 2019
vor einem Jahr

OK danke schon mal. Soweit ist mir ja alles recht klar.

Zur deiner Frage: es handelt sich um eine normale Windows SMB Netzfreigabe, ohne AD. Ich kann mit dem Explorer darauf zugreifen und bearbeite Dokumente die darauf gesichert sind in z.B. mig Word und Excel und sichere Daten darauf. Mein Nutzer hat also definitiv die erforderlichen Rechte zum lesen/schreiben. Wenn ich mit dem Windwos-Explorer bzw. Word/Excel darauf zugreife, springt auch die UAC nicht an (denn mein Nutzer hat alle erforderlichen Rechte)

Also kann es nur so sein dass "nicht zwangsläufig mit den vollen Rechten des Benutzers" die Anwendung läuft. Aber mit welchen Rechten läuft sie dann und wie kann ich die Rechte entsprechend erhöhen, so dass ich darauf zugreifen kann.

BTW: das Phänomen tritt auch bei externen Festplatten auf. Ich kann mit allen Anwendungen auf das Verzeichnis zugreifen, nur meine .Net Applikationen werfen eine AccessDeniedException ...

B
backspeck42 Themenstarter:in
35 Beiträge seit 2019
vor einem Jahr

Die Anwendung läuft mit dem Rechten des Benutzers der diese startet.
Entsprechend wäre die Frage wie der Code aussieht und ob du sicherstellst, dass alles vorhanden ist (Ordner).
Zeigt am besten mal den Code, dann kann man dies ggf. prüfen.

T-Virus

Danke aber es liegt definitiv nicht an nicht vorhandenen Ordern. Dann bekommt man außerdem eine System.IO.DirectoryNotFoundException - ich bekomme allerdings eine System.UnauthorizedAccessException ...
... dass die Anwendung mit den Rechten des Nutzers läuft war auch mein Gedanke - allerdings "sperrt" doch Windows manchmal DAteien die man aus dem Netz geladen hat oder ähnliches und fordert auf zu bestätigen, dass man die Datei wirklich öffenen will - sie könnte ja gefährlich sein. Vlt. ist das in meinem Falle der Fall?

16.806 Beiträge seit 2008
vor einem Jahr

das Phänomen tritt auch bei externen Festplatten auf. Ich kann mit allen Anwendungen auf das Verzeichnis zugreifen, nur meine .Net Applikationen werfen eine AccessDeniedException ...

Jetzt vermischt Du mehrere paar Stiefel, was nicht hilft.
Lokale Festplatten, externe Festplatten und Netzwerk-Laufwerke sind drei völlig verschiedene Arten des Dateizugriffs. Du vergleichst Äpfel mit Birnen an der Stelle.

das Phänomen tritt auch bei externen Festplatten auf. Ich kann mit allen Anwendungen auf das Verzeichnis zugreifen, nur meine .Net Applikationen werfen eine AccessDeniedException

Kein Standardverhalten. Hab ich soeben kurz mit meiner externen, über USB angeschlossenen HDD getestet.
Geht einwandfrei, sowohl mit .NET Framework 4.8 Console Template in VS, wie auch mit .NET 6.

eine normale Windows SMB Netzfreigabe, ohne AD

Eine "normale" Windows SMB Netzwerkfreigabe akzeptiert keinen anonymen Zugriff, Du musst authentifiziert sein - also was ganz anderes als lokale oder externe Festplatten.
Beim ersten Zugriff über den Explorer fragt er Dich nach Credentials.

Hast Du das Laufwerk eingebunden, dann merkt sich bzw. handlet Windows die Credentials und Du kannst darüber zugreifen.
Verwendest den UNC Pfad, musst das alles selbst handlen.

Aber Du hast leider immer noch nicht gezeigt, wie Du auf das Zeug zugreifst, weshalb das für uns Glaskugelraten bleibt.
Weil mir wahrscheinlich Infos fehlen nehme ich trotzdem an, dass der Fehler eher im Code ist.
Wenn man zB versucht statt einer Datei einen Ordner mit dem FileStream zu öffnen, bekommt man auch einen Access Denied Error - einfach kein das Dateisystem so ein Zugriff auf einen Ordner halt nicht zulässt.

PS: bitte keine Full Quotes, hab sie wieder raus gelöscht.
Siehe [Hinweis] Wie poste ich richtig?

allerdings "sperrt" doch Windows manchmal DAteien die man aus dem Netz geladen hat

Wenn "Windows" etwas sperrt, gilt das für alle Anwendungen (untrusted network shares).
Es gibt noch die Code Access Policies, die sich auf Code von Managed Applications auswirkt, aber mit Dateien zum Öffnen nix zutun hat.

B
backspeck42 Themenstarter:in
35 Beiträge seit 2019
vor einem Jahr

Wenn man zB versucht statt einer Datei einen Ordner mit dem FileStream zu öffnen, bekommt man auch einen Access Denied Error - einfach kein das Dateisystem so ein Zugriff auf einen Ordner halt nicht zulässt.

Das mir ja jetzt fast schon etwas peinlich - aber es liegt tatsächlich daran. Ich habe ein kleines Testprogramm um verschiedene Serialisierungsmethoden zu testen - und dann irgendwann in der Betriebsblindheit nicht gemerkt, dass ich wirklich beim ändern des Pfades vesehentlich den Dateinamen vergessen hatte und nur den Ordner angegeben hatte! Bisschen hat mich die Access Denied-Meldung dann noch in die Irre geführt und ich tippte auf das Berechtigungsproblem ... xD

16.806 Beiträge seit 2008
vor einem Jahr

Gut, dass es Dir peinlich ist 😉

B
backspeck42 Themenstarter:in
35 Beiträge seit 2019
vor einem Jahr

Gut, dass es Dir peinlich ist 😉

Ja ... nächste Woche mache ich Urlaub - das wird Zeit wie es aussieht ... ;D

709 Beiträge seit 2008
vor einem Jahr

Hauptsache der Fehler ist gefunden.
Ich behaupte mal, dass sich von sowas annähernd jedem schon einmal passiert ist. 😄

Hab einen schönen Urlaub!