繁体   English   中英

在Visual Studio 2008中是否存在以管理员身份运行Visual Studio时在C ++中使用放置目标的已知错误?

[英]Is there a known bug in Visual Studio 2008 for using drop target in C++ when running Visual Studio as administrator?

我们有一个应用程序,允许用户将图片拖动到窗口,并且该窗口是放置目标(使用OLE)。 当此代码在调试器中运行并且Visual Studio实例以管理员身份运行(从桌面右击)时,则不允许目标放置。

如果该exe独立运行,则可以正常运行。

如果Visual Studio实例不是以管理员身份运行的,则该功能在调试器中可以正常工作。 (相同的解决方案/项目文件/等)

Win7 OS。 Visual Studio2008。非托管C ++

我觉得很奇怪。 不知道为什么会这样。 实际上,我会猜想与以管理员身份运行VS相对的。

是否有人看过此书,或者是否有人链接到变通方法或解释?

这最有可能由于UIPI (用户界面特权隔离)而发生。

如果您以Admin身份启动了流程(由于父流程(Visual Studio)以admin身份运行),则UIPI不会让未提升的(admin)流程将任何消息发送到您的应用程序。 应用程序之间的拖放是使用Windows消息实现的。

若要解决此问题,可以使用ChangeWindowMessageFilterEx() API选择加入适当的拖放消息。

如果您想真正地修复它,那么您需要

  1. 检测您的进程何时运行提升
  2. 生成一个非提升的辅助进程,该进程注册为放置目标
  3. 使用可以跨特权边界安全使用的方法(即,没有活动的对象携带代码)通过IPC将丢弃的数据传递给提升的进程

当解决方法可能就像从另一个提升的应用程序中删除一样简单时,这是很多额外的工作(要获得提升的资源管理器,只需调用任何提升应用程序的File-> Open对话框),但是具有拖动和如果您的任何客户曾经运行过提升的应用程序,-drop都将正常工作。

不幸的是,这看起来像是操作系统中的缺陷:

http://blogs.msdn.com/b/patricka/archive/2010/01/28/q-why-doesn-t-drag-and-drop-work-when-my-application-is-running-elevated-一个强制完整性控制和-uipi.aspx

那好吧。

我觉得这整个问题令人震惊。 微软已经把这个IMO搞砸了。 本质上,如果我想以提升模式运行MSVC,例如,当我构建其注册COM服务器的解决方案时,我们将无法正确调试应用程序。

http://social.msdn.microsoft.com/forums/en-US/windowsuidevelopment/thread/2fa935cf-be57-4bcc-9b96-7ee5a6b2b7a5/

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM