C#拖放在Windows 7上不起作用

Osk*_*lin 45 .net c# drag-and-drop windows-7

我使用C#winforms有一段时间的项目.我在Windows 7发布之前实现了拖放功能.工作就像一个魅力.但是,使用Windows 7时它不起作用.该事件甚至没有被触发.

AllowDrop设置为true.订阅DragEnter它时,不会在Windows 7中调用(不确定vista).但是在XP上它一直都有效.该程序使用administritave priviliges运行.

Windows 7与xp的拖拽有什么不同吗?不知道它是否相关,但我使用的是x64

Tim*_*oyd 77

源和目标进程需要具有兼容的安全级别\权限.例如,如果您的源是资源管理器并且它以用户级别权限运行,但您的目标应用程序正在以管理员(提升)级别权限运行,则您将无法拖放,因为这被视为安全问题,因为目标是以更高级别的权限运行.

  • 太糟糕的Windows并没有告诉用户它正在这样做.就用户(和开发人员!)而言,该应用程序不像过去那样支持拖放操作.我的应用程序可以作为普通用户运行,但我作为管理员运行VS,以便它可以注册COM DLL. (10认同)
  • 应提供改变您需要更改的内容的动力,以便您的应用程序可以作为标准用户运行.例如,不要写入程序文件,HKLM等. (4认同)
  • @Oskar Kjellin好吧,如果你需要拖放,请将需求提升部分分开并让它们作为单独的提升过程启动,这样主要部分就可以成为标准用户. (2认同)

Han*_*ant 17

它被称为UIPI,用户界面权限隔离.旨在防止来自具有受限特权的程序的输入注入攻击.它可以被禁用,你需要这样做:

  • 修改清单,将<requestedExecutionLevel>元素的uiAccess属性设置为true.
  • 将程序的EXE存储在c:\ windows或c:\ program files的子目录中
  • 使用有效代码签名授权机构的证书为您的EXE签名

从来没有尝试过这个,ymmv.

  • +1 很好的答案:) 感谢您弄清楚如何解决它。不过对我来说不值得:) (2认同)