拖放功能在提升时可正常工作,但在以管理员身份运行时无效

时间:2015-01-02 09:25:24

标签: c# wpf drag-and-drop mvvm-light

所以我在wpf中的ListView上设置了拖放功能,如此

xmlns:i="http://schemas.microsoft.com/expression/2010/interactivity" 
xmlns:Command="clr-namespace:GalaSoft.MvvmLight.Command;assembly=GalaSoft.MvvmLight.Extras"

<ListView>
   <i:Interaction.Triggers>
       <i:EventTrigger EventName="Drop">
            <Command:EventToCommand Command="{Binding DropFiles}" PassEventArgsToCommand="True"/>
        </i:EventTrigger>
    </i:Interaction.Triggers>
</ListView>

在我看来模特我有

    private RelayCommand<DragEventArgs> _dropFiles;

    /// <summary>
    /// Gets the DropFiles.
    /// </summary>
    public RelayCommand<DragEventArgs> DropFiles
    {
        get
        {
            return _dropFiles
                ?? (_dropFiles = new RelayCommand<DragEventArgs>(
                args =>
                {
                  //Do Something with args
                }));
        }
    }

这在调试模式下工作正常,但是当我部署此版本时,当我尝试将文件拖放到列表视图中时,会出现以下图标:

enter image description here

有没有人知道为什么会这样?

更新

如果我以管理员身份运行我的项目,那么拖放功能就像所描述的那样被破坏,就好像我以管理员身份运行我的项目,拖放功能正常工作。为什么会这样?

1 个答案:

答案 0 :(得分:1)

所以我并不完全理解这一点,但看起来安全就是问题

  

用户界面权限隔离(UIPI)

     

好的,回到我们的阻力和   drop issue ...一种与MIC结合使用的“姐妹”技术   是UIPI。 UIPI使用a阻止从进程发送的Windows消息   将MIC水平降低到以更高MIC水平运行的水平。拖放是   通过Windows消息实现。因此,如果你尝试和   将文件从Windows资源管理器(中等MIC)拖放到记事本   运行提升(高MIC),Windows消息被阻止和   拖放不起作用。

     

您可以在应用程序中使用ChangeWindowsMessageFilterEx来允许   指定的Windows消息不被阻止。不幸的是,这个   不建议将其作为拖放的安全解决方案   拖放使用的消息。

     

<强>好。现在什么?

     

最好的解决方案是只使用拖放   相同的MIC水平。启用UAC后,Windows资源管理器将在a运行   中等MIC水平。因此,您的应用程序(记事本在我们的   例如)需要以中等(或更低)MIC水平运行。底线   如果您的,从Windows资源管理器拖放将无法正常工作   申请提升。如果你发现自己处于这种状况,那么你   可能需要重新考虑您的应用程序设计或不支持   在启用UAC的情况下进行拖放。

取自http://blogs.msdn.com/b/patricka/archive/2010/01/28/q-why-doesn-t-drag-and-drop-work-when-my-application-is-running-elevated-a-mandatory-integrity-control-and-uipi.aspx