Laden...

Dateien via DragnDrop auf den Öffentlichen Desktop ablegen: Zugriff verweigert

Erstellt von Sykwitit vor 10 Jahren Letzter Beitrag vor 10 Jahren 3.408 Views
S
Sykwitit Themenstarter:in
14 Beiträge seit 2010
vor 10 Jahren
Dateien via DragnDrop auf den Öffentlichen Desktop ablegen: Zugriff verweigert

Hallo!

Ich suche eine Methode, wie ich Dateien auf den öffentlichen Desktop, also C:\Users\Public\Desktop ablegen kann.

Meine Methode

        public void DragDrop(object sender, System.Windows.Forms.DragEventArgs e)
        {
            string path = System.Environment.GetFolderPath(Environment.SpecialFolder.Desktop);
            string filesource = null;
            string[] FileList = (string[])e.Data.GetData(DataFormats.FileDrop, false);
            string filename = "";

            foreach (string file in FileList)
            {
                filesource = file;
                txtbox.Text= filesource;
                filename = Path.GetFileName(filesource);
            }
            System.IO.File.Copy(filesource, path + "\\" + filename,true);
        }

leider wird der Zugriff verwehrt. Welche Möglichkeiten gibt es da noch?

49.485 Beiträge seit 2005
vor 10 Jahren

Hallo Sykwitit,

ich vermute, du musst dein Programm "als Administrator ausführen".

herbivore

S
145 Beiträge seit 2013
vor 10 Jahren

Eigentlich sollte der Explorer das selbst händeln.
Glaube aber auf die File Liste als Angabe reagiert er nicht.

Mittels FileDescriptor sollte es gehen.

Ich hab nur mal schnell gegoogelt da ich kein VisualStudio hier habe, aber so ungefähr sollte es gehen:
How to use filegroupdescriptor to drag file to explorer c#

49.485 Beiträge seit 2005
vor 10 Jahren

Hallo Spyke,

aus meiner Sicht hat die Frage bzw. die Fehlerursache mit Drag und Drop und dem Windows Explorer nichts zu tun. Nach meinem Verständnis kommt die Exception beim Aufruf von File.Copy - wäre natürlich schön gewesen wäre, wenn Sykwitit den StackTrace der Exception angegeben hätte - und File.Copy ist es vollkommen egal, woher es seine Parameter hat. Der hier entscheidende Parameter, nämlich der Ziel-Pfad "C:\Users\Public\Desktop", auf den kein Zugriff besteht, kommt sowieso nicht aus den Drag&Drop-EventArgs, sondern von Environment.GetFolderPath (Environment.SpecialFolder.Desktop). Ich kann natürlich falsch liegen, aber erstmal würde ich von dieser Situation ausgehen.

herbivore

1.696 Beiträge seit 2006
vor 10 Jahren

Hallo,

ist der Rechner in einem Firmennetzwerk? Viele Firmen sperren den Desktop per Policy, damit die User ihn nicht mit .doc(x), .xls(x), etc. verwildert, denn dadurch wird das Userprofil sehr groß, welche wiederum den Anmeldeprozess sehr verzögert.

Grüße

Ich bin verantwortlich für das, was ich sage, nicht für das, was du verstehst.

**:::

S
Sykwitit Themenstarter:in
14 Beiträge seit 2010
vor 10 Jahren

Ja die PC's sind in einer Domäne, aber ich habe beschränkte Admin Rechte. Per Copy und Paste kann ich in den Public\Desktop Ordner schreiben, nur will ich es halt etwas automatisieren.

Hab leider die Exception jetzt nicht zur Hand, aber ich kann mich erinnern, dass Visual Studio sagte, dass der Zugriff verweigert wurde, obwohl ich Visual Studio als Admin gestartet habe. Hab auch im Manifest RequireAdminrights angegeben. Somit hab ich Adminrechte

16.834 Beiträge seit 2008
vor 10 Jahren

Nein. Nur weil man VS als Admin startet (funktioniert das überhaupt ohne lokalen Admin? Im Web jedenfalls nicht) heisst das nicht, dass die Anwendung mit Adminrechten oder dem entsprechenden Token läuft.

Wenn da dran steht keine Zugriffsrechte, dann hast Du eben keine Zugriffsrechte - Admin hin oder her.
Auch Admins haben auf gewisse Ordner keine Rechte oder man kann diese über Policies entziehen.

Versuch was anderes als den Desktop; es hört sich danach an, dass vbprogger recht hat.

T
708 Beiträge seit 2008
vor 10 Jahren

Nein. Nur weil man VS als Admin startet (funktioniert das überhaupt ohne lokalen Admin? Im Web jedenfalls nicht) heisst das nicht, dass die Anwendung mit Adminrechten oder dem entsprechenden Token läuft.

Ist es denn so, dass Deine Applikation aus VS gestartet wird? Dort habe ich (zumindest unter WIN8) festgestellt, dass Drag&Drop grundsätzlich nicht mehr funktioniert. Denn VS startet die Applikation unter einem anderen Benutzerkontext als der Explorer läuft. Daher gibt es keinen Zugriff.
Startet man die Anwendung aus dem Bin/Debug-Verzeichnis manuell, funktioniert es.

S
Sykwitit Themenstarter:in
14 Beiträge seit 2010
vor 10 Jahren

Adminrechte hab ich schon. Kann ja den PC umbennen, Software installieren etc.

Hab derzeit leider ein anderes problem:

Hab hier eine Listbox und habe dann die Methoden für DragDrop und DragEnter geschrieben. Diese hab ich natürlich in den Properties aktiviert.

Die Fuktion AllowDrop wurde ebenfalls aktiviert, nur lässt er mir keine Dateien mehr in die Listbox ablegen. Wenn ich mit der Maus in die Listbox reinfahre, bleibt da nur ein durchgestrichener Kreis.

Im Form1.Designer.cs ist es aufgelistet:

            this.dropBox.DragDrop += new System.Windows.Forms.DragEventHandler(this.Box_DragDrop);
            this.dropBox.DragEnter += new System.Windows.Forms.DragEventHandler(this.Box_DragEnter);
16.834 Beiträge seit 2008
vor 10 Jahren

Hast Du gelesen, was trib geschrieben hat?

S
Sykwitit Themenstarter:in
14 Beiträge seit 2010
vor 10 Jahren

Hab auch es auch im Debug Verzeichnis probiert und die exe mit Adminrechte gestartet, dass hat leider auch nicht funktioniert. Er nimmt die Dateien nicht an.

Hab mal ein neues Projekt mit 2 textboxen gemacht und da funktioniert drag und drop. Sprich textbox1 auf textbox2 kopieren.

Folgendes ist mir jetzt aufgefallen:

Wenn ich VS als normalen Benutzer starten, kann ich die Daten kopieren, aber sobal dich als Administrator anmelden, kann ich keine Dateien mehr per Drag und Drop kopieren!

Folgende Fehlermeldung taucht dann auf:> Fehlermeldung:

UnauthorizedAccessException wurde nicht von Benutzercode behandelt. - Der Zugriff auf den Pfad "C:\Users\Public\Desktop\Datei.txt" wurde verweigert.

Wenn ich das Programm jetzt als Admin starte, kann ich kein Drag and Drop machen, wenn das Programm normal gestartet wird, kann ich Drag and Drop ausführen, aber ich habe keine Berechtigungen auf den Desktop zu kopieren.

Folgende "Lösung" hätte ich gefunden:
Man muss VS als Administrator starten und danach den Explorer killen und dann den Explorer als Administrator starten. Dann geht auch Drag and Drop. Leider ist das keine schöne Lösung, aber es funktioniert zumindest. Hat jemand eine bessere Idee wie ich das realisieren könnte.

T
708 Beiträge seit 2008
vor 10 Jahren

Das ist genau was ich gemeint habe. Die Anwendung und der Explorer müssen vom selben Benutzer gestartet werden, damit sie interagieren dürfen. Sobald eins von beiden als Administrator läuft, geht Drag&Drop nicht mehr.
Da es aber häufig notwendig ist, VS als Admin auszuführen (Habe dafür extra ein Script um Registry-Einträge umzusetzen), kommt man um einen Workaround nicht herum.
Z.B. ein Button, der nur im Debug-Modus eingeblendet ist und der eine eigene Instanz des Explorers startet.