Вопрос или проблема
Когда у меня запущено приложение (Visual Studio 2008, Notepad и т.д.) с правами администратора, я не могу перетаскивать файлы из Windows Explorer в это приложение.
Я пытался запустить Windows Explorer от имени администратора, но безуспешно.
Есть ли способ заставить работать функцию перетаскивания, когда мои приложения работают с правами администратора?
Проблема связана с тем, как работают разрешения безопасности. Возможность перетаскивать файлы из обычного приложения в приложение с повышенными правами нарушила бы модель безопасности UAC. Однако мне непонятно, почему не отображается запрос UAC, который позволил бы временно выполнить операцию с повышенными правами (как это происходит у пользователей Linux каждый день). Это явно то, над чем Microsoft нужно поработать. Меня беспокоит, что эта проблема уже стара. Vista вела себя так же.
Есть 2 вещи, которые вы можете сделать (одно некрасивое, другое раздражающее)
- Некрасивый: Отключите UAC. Но вы утрачиваете всю дополнительную безопасность, которую он предоставляет.
- Раздражающий: Используйте другой файловый менеджер и запустите его тоже от имени администратора
Почему другой файловый менеджер? Потому что вы на самом деле не можете повысить права Windows Explorer. Несмотря на то, что вы видите эту опцию в контекстном меню значка Windows Explorer и появляется запрос UAC, на самом деле Windows Explorer не будет работать с повышенными правами.
Это обходное решение согласно “Раздражающему” способу ADwarf: откройте Блокнот с правами администратора. Щелкните “Открыть” в меню “Файл” и введите * в имени файла и нажмите Enter. Теперь вы можете перетаскивать файлы оттуда в свое приложение.
Браузер открытия Блокнота не поддерживает выбор нескольких файлов, но вы можете использовать другие программы таким же образом для перетаскивания!
Windows 7:
Запустите PowerShell от имени администратора
Введите:
taskkill /f /im explorer.exe
start-process explorer.exe
или запустите cmd (Командную строку) от имени администратора
Введите:
taskkill /f /im explorer.exe
start explorer.exe
Все новые окна Explorer теперь будут работать с повышенными правами, и вы можете перетаскивать файлы из них в другие приложения с повышенными правами. Я проверил и подтвердил это перед публикацией.
Было обновление для Visual Studio 2005, опубликованное 2 года назад, которое исправило многие проблемы UAC на Vista, и это же обновление устраняет те же проблемы на Windows 7.
Это не критическое обновление, поэтому вы не получите его автоматически, и оно не было включено в VS2005 SP1. Они не активно рекламируют это обновление сейчас, потому что просто хотят, чтобы все перешли на VS2008. Так что, скорее всего, у вас его нет.
Пояснение по http://msdn.microsoft.com/en-us/vstudio/aa948853.aspx?lcid=1033
Вот что исправляет это обновление, при запуске Visual Studio в режиме обычного пользователя с включенным UAC:
- Перетаскивание файлов из окна проводника
- Запуск VS (как обычного пользователя) путем запуска ярлыков для решений/проектов или связанных типов файлов
- Регистрация DLL/EXE все еще не удается (и правильно, поскольку это изменения на уровне системы.)
Если вы запускаете VS с правами администратора, окно все еще заблокировано для перетаскивания и ярлыков, и регистрация DLL/EXE выполняется правильно без необходимости полностью отключать UAC.
Примечание: VS все равно предупреждает вас о режиме администратора при запуске, но теперь, вероятно, вы можете игнорировать это предупреждение навсегда.
Вот решение:
https://github.com/libxcc/QWidget-Admin-Drag
Очевидно, Qt имеет некоторые проблемы под правами администратора.
Метод перетаскивания, используемый Qt, может отображать некоторые значки на интерфейсе, но он не может срабатывать, когда администратор находится в роли администратора.
Поэтому мы можем использовать альтернативные методы, чтобы обойти его и отправить события самостоятельно. Недостатком является то, что значок не может быть отображен. В качестве альтернативы мы можем использовать метод Qt для добавления значка, но я не решил эту задачу.
.
Ответ или решение
Теория (Theory):
Проблема перетаскивания файлов в приложения, работающие с повышенными правами (например, "Run as Administrator"), связана с особенностями модели безопасности операционной системы Windows и контролем учетных записей пользователей (User Account Control, UAC). UAC предназначен для ограничения прав доступа программ и защиты от несанкционированных действий, таких как установка вредоносного ПО или выполнение потенциально опасных скриптов. Когда приложение запущено с правами администратора, оно помещается в отдельное пространство от обычных программ, что предотвращает передачу данных между приложениями с разными уровнями доступа.
Система не позволяет перетаскивать файлы из обычного окна Проводника в окно приложения с повышенными правами, так как это нарушает принцип безопасности данных, снижая целостность изоляции процессов.
Пример (Example):
Рассмотрим сценарий, когда вы запускаете Visual Studio 2008 с правами администратора для доступа к определенным системным функциям или плагинам. При попытке перетащить файл из Проводника в окно Visual Studio, вы замечаете, что операция не выполняется. Это вызвано тем, что стандартный Проводник Windows работает в контексте пользователя без привилегий администратора, и, следовательно, не может напрямую взаимодействовать с процессами, работающими с повышенными правами.
Попытка запустить Проводник с правами администратора также не дает результатов, поскольку структура Windows не допускает полноценного повышения прав для Проводника, несмотря на отображаемое контекстное меню.
Применение (Application):
-
Отключение UAC: Вы можете полностью отключить UAC, чтобы избежать этой проблемы. Однако это решение крайне небезопасно, так как вы потеряете все преимущества защиты, которые предоставляет UAC. Современные атаки часто используют программы, работающие на уровне пользователя, чтобы повысить привилегии, и отключение UAC делает систему более уязвимой.
-
Использование альтернативного файлового менеджера: Одним из наиболее приемлемых решений является использование стороннего файлового менеджера, который позволит запускать свой процесс с правами администратора. Например, сторонние приложения как Total Commander могут быть запущены с повышенными правами, чтобы обеспечить поддержку перетаскивания файлов в приложения, работающие с теми же администраторскими правами.
-
Перезапуск Проводника с правами администратора: Для операторов системы Windows 7 и выше возможно возобновление сессии Проводника в административном контексте с использованием командной строки:
taskkill /f /im explorer.exe start explorer.exe
Такая процедура обеспечит работу новых окон Проводника с повышенными правами, что позволит перетаскивание файлов в приложения, которые также работают с правами администратора. Однако такой метод может вызвать нестабильности в работе сессии Windows, и его использования следует избегать на постоянной основе.
-
Использование альтернативных методов открытия файлов: Если ваше приложение поддерживает альтернативные методы открытия файлов, такие как встроенные диалоговые окна, вы можете использовать их для обхода ограничений. Например, Notepad с правами администратора позволяет использовать собственное меню открытия файла для выборки и работы с файлами, избегая механизма перетаскивания.
-
Обновление до более новых версий программ: Проблема перетаскивания файлов была решена в обновленных версиях Visual Studio, таких как Visual Studio 2008, в отличие от старых версий, таких как Visual Studio 2005. Поэтому рекомендуется обновляться до последних версий программного обеспечения, которые предоставляют исправления ошибок и улучшения.
-
Специализированные решения: Для определенных библиотек или фреймворков, например Qt, можно воспользоваться патчами или сторонними решениями, которые обрабатывают механизмы перетаскивания для приложений, работающих в режиме администратора. Например, разработчики могут воспользоваться патчами из репозитория QWidget-Admin-Drag, которые обходят ограничения Qt.
Эти решения и подходы могут варьироваться в зависимости от ваших требований безопасности и индивидуальных предпочтений в работе с операционной системой. Независимо от выбранного метода, важно поддерживать баланс между удобством использования и уровнем защиты вашей системы.