Drag+Drop geht nicht mehr



  • Hallo,

    in meinem Programm gibt es seit neustem das Problem, dass Drag and Drop nicht
    mehr funktioniert - und zwar in allen Controls. Das sind bspw. mehrere TreeViews, ein DataGrid und mehr.

    Das MouseOver wird erkannt und dann das DoDragDrop(..) wird ausgeführt, allerdings scheinbar nur in meinem Code und nicht im Backend.
    Zu diesem Problem scheint es sporadisch zu kommen, leider konnte ich es bisher noch auf keine definitive Ursache zurückführen.

    Weiß da vielleicht jemand Rat?



  • Ich habe das Problem leider immer noch nicht gelöst, allerdings gibt es scheinbar noch ein Problem an anderer Stelle, welches damit zusammenhängt.
    Und zwar will ich den explorer.exe an einer bestimmten Stelle starten. Hierbei kommt der folgende Fehler:
    Fehler -2147467259: "Der angegebenen Datei ist keine Anwendung zugeordnet"

    Vielleicht doch noch jemand ne Idee?



  • Niemand?
    Wirklich keiner ???
    😞

    Ich habe jetzt noch festgestellt, dass dem Ganzen ein Fehler in der mscorlib.dll vorausgeht.
    Hierfür scheint eine Interop Komponente verantwortlich zu sein ...


  • Administrator

    Ich kenne mich mit Drag&Drop in C# nicht aus, kann dir also nur sehr schlecht helfen. Aber mal einfach grundsätzlich, scheinen mir die Informationen etwas dürftig zu sein, welche du uns gibst.
    0. Es scheint mal funktioniert zu haben, schon mal probiert festzustellen, was sich in der Zwischenzeit verändert hat?
    1. Du redest von deinem Code, zeigst aber nichts davon. Wir wissen nicht mal, ob du alles richtig initialisiert hast.
    2. Du redest von einem Backend. Ich habe keine Ahnung, was du damit meinst. Daher habe ich auch Mühe mit dem Satz dort. Was funktioniert nun wo und wo funktioniert es nicht?
    3. Sporadische Fehler sind mühsame Fehler. Wenn man einen Fehler nicht reproduzieren kann, dann tappt man ziemlich im Dunkeln. Meistens liegt aber irgendwo ein Logikfehler vor und zwar im eigenen Programm.
    4. Wie soll das Starten von der explorer.exe mit Drag&Drop zusammenhängen? Wie kommst du darauf? Wieso willst du überhaupt die explorer.exe starten? Der Fehler wirkt zudem überhaupt nicht nach einem Drag&Drop Fehler sondern eher danach, dass du ein File ohne Endung oder mit Endung, aber ohne zugewiesener Standardanwendung, starten möchtest.
    5. Du schreibst von einem Fehler in der mscorlib.dll , ohne diesen Fehler genauer zu bezeichnen. Was soll das für ein Fehler sein? Wie stellst du diesen fest? Wann passiert er? Wo in deinem Code? Was für eine Interop Komponente? Von was zur Hölle redest du da?
    6. Ein Beispielcode, welcher dein Problem in Kürze reproduziert, wäre sehr hilfreich für dich und für uns. Probier das Problem in einem kurzen Programm zu reproduzieren. Da kann plötzlich von alleine der AHA-Effekt eintreten.

    Grüssli



  • Hi,

    1. ja ... allerdings ohne Erfolg
    2. Da der Fehler nur sporadisch auftritt, kann ich auch leider nicht *die* Stelle posten, an der es geschieht.
    3. Sorry, mit Backend mein ich die .NET Runtime, bzw, das worauf sie zugreift
    4. Dito, ist aber kein Logikfehler. Mehr als DoDragDrop aufrufen kann ich auch nicht machen. Ich kann da leider nicht soweit ins Framework reingucken, um zu sehen, warum kein Drag gemacht wird sondern der Stack (oder was auch immer da im Hintergrund liegt, leer bleibt ...
    5. Ist nur eine Vermutung von mir. Das Starten eine Prozessen, ob explorer.exe oder sonst was, nutzt im Hintergrund Win32/COM, ebenso wie die Drag+Drop Funktionalität oder eben ein Interop Service. Und da dies alles nicht mehr Funktioniert vermute ich dort den Fehler.

    Ich kann leider keine genaueren Information liefern. Wie ich schon sagte tritt das Problem nur sporadisch auf, scheinbar nach irgendwelchen impliziten Win32 Zugriffen (wie zB das Starten eines externen Prozesses, oder eben dem Nutzen einer Interop-Bibliothek) - und das auch nicht immer.
    Die Debug Infos, die ich erhalte sind auch nicht mehr, als ich bereits geschrieben habe - das macht das ganze ja so sche**e.



  • Können denn noch andere Apps das Drag'n'Drop ausführen oder ist dannd er Fehler nur in deiner App?


  • Administrator

    Was ist denn eigentlich der genaue Fehler? Du sagst, dass das MouseOver Event ausgeführt wird, also ruft es auch die DoDragDrop Methode auf. Gibt es dann eine Exception oder was passiert dann? Oder passiert einfach gar nichts? Was probierst du denn für Objekte zu verschieben? Ist es im übrigen eine Forms oder WPF Anwendung?

    Hast du schonmal eine neue Anwendung gestartet, von einem Bereich das Drag&Drop reproduziert und dann geschaut, ob der Fehler auch sporadisch auftaucht?

    Und wie hast du im übrigen überprüft, wann der Fehler auftaucht? Wie kommst du darauf, dass es mit der explorer.exe oder mit Win32 Aufrufen zusammenhängt? Wie bist du darauf gekommen? Wie kommst du zum Beispiel zu diesem Fehler der explorer.exe ?

    Grüssli



  • Unter Win7 werden Drag-Operationen von einem Process mit niedriger Sicherheitsstufe in einen Process mit höherer Sicherheitsstufe vom UAC blockiert.

    Beispiel: Du startest ein Programm als Administrator (oder elevatest es nachträglich) und versuchst dann etwas aus dem Explorer auf das Programm zu draggen --> wird blockiert weil Explorer nur USer-Priviledges hat, das Programm aber als Admin läuft. Dies gilt allgemien für Nachrichten zwischen Prozessen und betrifft halt auch DragnDrop.



  • Hallo,
    ich konnte die Ursache jetzt lokalisieren. Wie vermutet scheint es wohl so, dass das Nutzen einer COM Komponente mittels Interop zu einer Art "Blockade" tief im .NET Framework führt. Allerdings nur, wenn die COM Schnittstellen in einer speziellen Reihenfolge aufgerufen werden.

    Danke trotzdem ...


Anmelden zum Antworten