Страницы

Поиск по вопросам

воскресенье, 15 марта 2020 г.

Событие DragOver не приходит, при запуске программы под администратором

#c_sharp #wpf #xaml #drag_n_drop


Сделал GUI для серверной части системы, и начал было делать сам сервер, но при запуске
приложения от имени администратора событие DragOver тупо не вызывается.
При обычном запуске все ОК.

Для чистоты эксперимента создал новое решение, где с окном из такого кода:


    
        
    





private void UIElement_OnDragOver(object sender, DragEventArgs e)
{
    e.Effects = DragDropEffects.Copy;
}

private void UIElement_OnDrop(object sender, DragEventArgs e)
{
}


Результат тот же самый.
    


Ответы

Ответ 1



Это защита. UAC и всё такое. Если приложение, из которого производится перенос, имеет уровень доступа ниже, чем приложение, в которое переносится перенос, то операция запрещается на уровне операционной системы. Соответственно, нельзя перенести что-либо из приложения, запущенного под юзером, в приложение, запущенное под админом. А вот наоборот — можно. Код здесь совершенно не при чём. Вы можете запустить любое приложение, поддерживающее drag-n-drop, под админом, и убедиться, что на него нельзя ничего перенести из программ, запущенных не из-под админа. См. Q: Why Doesn’t Drag-and-Drop work when my Application is Running Elevated? – A: Mandatory Integrity Control and UIPI для более подробного объяснения. Если требуется перенос файлов, то существует костыль с ChangeWindowMessageFilterEx. См. How to enable drag and drop between normal & UAC elevated privileges applications.

Комментариев нет:

Отправить комментарий