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?
Hallo Sykwitit,
ich vermute, du musst dein Programm "als Administrator ausführen".
herbivore
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#
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
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
**:::
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
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.
- performance is a feature -
Microsoft MVP - @Website - @AzureStuttgart - github.com/BenjaminAbt - Sustainable Code
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.
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);
Hast Du gelesen, was trib geschrieben hat?
- performance is a feature -
Microsoft MVP - @Website - @AzureStuttgart - github.com/BenjaminAbt - Sustainable Code
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.
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.