Перестал работать drag and drop windows
Пытаюсь с рабочего стола (Windows 7) перетащить файл для добавления его в архив. Программа-архиватор используется WinRAR версии 3.93. Сам процесс перетаскивания происходит штатным образом (файл «цепляется», изменяется курсор, в том числе и при наведении его в окно приложения), высвечивается рядом с курсором значок «+», но при отпускании кнопки мыши действие не выполняется. Создается впечатление, что действие было отменено или сброшено. При этом никаких ошибок не высвечивается. Данная проблема действует с момента приобретения и установки Windows Vista и Windows 7. Способов самостоятельного устранения данной проблемы не найдено. Поиск по сайту microsoft.com, другим поисковым системам и форумам результатов не дал.
Дополнительно сообщаю, что такая же проблема возникает при перетаскивании файла в окно приложения, разработанное с использованием Microsoft Visual Basic 6.0.
В операционной системе Windows XP вышеуказанные приложения в части перетаскивания файлов работают без проблем.
Запись действий см. в приложении http://narod.ru/disk/13608573001/Drap%20%26%20Drop.zip.html
- Changed type Vinokurov Yuriy Moderator Wednesday, June 22, 2011 8:56 AM давность и отсутствие активности в теме
- Changed type Vinokurov Yuriy Moderator Wednesday, July 6, 2011 2:58 AM
All replies
Для начала sfc /scannow. Плюс еще вот какой момент — у вас UAC не отключен? Если отключен и программы, в которые вы перетаскиваете файлы, запускаются с повышенными привилегиями (щит на значке программы), то возможна подобная картина. Мнения, высказанные здесь, являются отражением моих личных взглядов, а не позиции корпорации Microsoft. Вся информация предоставляется «как есть» без каких-либо гарантий
Протестировал, подтверждаю — для WinRar 3.93 и 4.01 наблюдается данный баг в ОС Vista и Windows 7. Удалось заметить, что при попытке добавления файла возникает ошибка отказа в доступе. Поскольку WinRar не ведет логов, то выяснить, к чему конкретно выдан отказ в доступе, затруднительно. Рекомендую пообщаться с разработчиком на этот счет. По поводу вашего приложения — выясняйте, куда в процессе перетаскивания идет промежжуточная запись и что с правами на это размещение. Мнения, высказанные здесь, являются отражением моих личных взглядов, а не позиции корпорации Microsoft. Вся информация предоставляется «как есть» без каких-либо гарантий
Дополнительно сообщаю, что любая программа, запущенная от имени администратора показывает тот же баг при перетаскивании (проверено на QIP, Word, Internet Explorer, КОМПАС-3D V11, Total Commander).
конкретно с перетаскиванием — не баг, под аккаунтом с административными привилегиями всё правильно — технически это попытка потока с Low integrity level получить доступ к данным потока с High integrity level: не будет работать. смущает только одно — вы утверждаете, что UAC у вас отключен: в этом случае все потоки стартуют с административным токеном, но вот касательно уровней целостности. а как именно у вас «UAC действительно отключен«? навскидку не скажу, да и времени особо нет: коллеги продвинутые, вопрос к вам — влияет ли как-либо UAC на Integrity Control?
Выглядит багом, но не баг 🙂 Я объяснял это поведение UAC здесь http://www.outsidethebox.ms/10841/#comment-323
Но если UAC отключен, то все программы у администратора запускаются с полными правами, поэтому проблема с перетаскиванием может быть лишь багом программы, а не ОС.
AndricoRus, на самом деле у администратора два токена — один стандартного пользователя с medium (не low) IL, другой — администратора high IL http://msdn.microsoft.com/en-us/library/bb625962.aspx
Между UAC и Mandatory Integrity Control связь есть. Так, без UAC не работает защищенный режим в IE, который обеспечивает выполнение процессoв из IE с низким IL. http://www.outsidethebox.ms/9994/#protectedmode
- Proposed as answer by AndricoRus Editor Wednesday, July 6, 2011 9:26 AM
Т.е. если UAC работает и файл перетаскивается в приложение, запущенное под администратором, то не быть перетаскиванию вообще?
Смотря откуда вы перетаскиваете. Если из проводника, то да, по умолчанию он запускается с обычными правами. В общем, я по ссылке выше объяснил уже это, да и про причины там тоже сказано, равно как и парой постов выше.
В чем конкретно ваша проблема? Если WinRar запущен с обычными правами, то перетащить в него файл из проводника не проблема. Если только это не баг программы. Если же вы запускаете его с полными правами, то. зачем?
1. Обновите WinRAR,
2. Запишите процесс вашего перетаскивания с помощью Пуск — Поиск — psr. Включите в запись настройки UAC.
3. Выложите на skydrive.com.
Vadim Sterkin, перетаскиваю из проводника. То, что сказано по ссылке — с этим все понятно. По поводу UAC поясню — отключался он на время тестирования, когда Vinokurov Yuriy сообщил, что » Если отключен . то возможна подобная картина», поэтому он был включен обратно.
По поводу ранее сказанного » включение/выключение UAC ничего не меняет» вношу коррективы: выключение в тот момент UAC не было введено в действие, т.к. ПК не перезагружался (либо сообщение не высветилось или не было замечено). Тем не менее суть остается неизменной, а именно:
- отличий архиватора, от остальных программ, поддерживающих перетаскивание, в данной ситуации не замечено (т.е. бага архиватора нет);
- запускаем его с полными правами, затем, что при необходимости заархивировать папку/файл в корне диска, Program Files и т.п., то крайне неудобно и долго проделывать весь этот процесс: лезть в папку программы, ставить административные права, снова архивировать и снимать административные права; вот случилось так, что не пользователь я простой — не просто скидываю файл в мои документы и читаю его, а выполняю постоянно системные и прочие настройки — на что учетная запись администратора??
- проблема остается быть проблемой, т.к. решения до сих пор не озвучено (предложено мной ранее: а) перетаскивание не контролировать через MIC. б) выдавать запрос на выполнение операции).
В связи с вышеизложенным не вижу целесообразности вновь записывать проблемы перетаскивания, т.к. запись выложена в первом сообщении.
P.S. Если MIC призван отнять у пользователя (какой бы он не был админ) права на изменение разрешений взаимодействия объектов с более низким уровнем, чем у другого объекта, то отключил UAC и MIC не работает.
vbAlexey, теперь соврешенно понятно, что вы запускаете архиватор с полными правами, отсюда и проблема. Полноценное решение может предоставить только Microsoft в будущих ОС, но за две последних этого не произошло, так что не надейтесь особо.
Могу вам предложить два обходных пути:
- Отказаться от перетаскивания, т.е. открывать папки из архиватора, запущенного с полными правами. Сомневаюсь, что этот путь вас устроит, однако он проще, чем вы описали это в п. 2 выше. В т.ч. не забывайте о возможности копировать путь из адресной строки и вставлять в архиватор.
- Открывать архивируемую папку в отдельном процессе проводника с повышенными правами (добавить соотв. пункт в контекстное меню очень просто). Это лучший путь в вашей ситуации — открыли родительскую папку и перетащили нужную дочернюю в архиватор.
Отдельно замечу, что проблем с архивированием папок в корне диска быть не должно, т.к. на их создание не требуются полные права в отличие от файлов. Однако от практики хранения данных в корне диска нужно отказываться, если вы работаете в проводнике с его библиотеками, поиском и т.д. Иначе вы проигрываете в эффективности.
Vadim Sterkin, естественно решение может предоставить только Microsoft, я же не на какую-то иную тех.поддержку пишу. Однако, непосредственно представителей и не слышно.
На самом деле обходных путей достаточно уже опробовано, даже помимо 2-ух вышеуказанных, вплоть до использования предыдущих версий ОС (да, к сожалению не все юзеры, которых работа научила получать бо’льшую пользу от компьютера, готовы в момент перейти в прилично обновленную среду), НО все они (обх. пути) снова и снова приводят к желанию наконец-то внести изменения в ОС.
Незнаю, как Вам удавалось открывать папку в отдельном процессе проводника с повышенными правами, т.к. такие манипуляции (в т.ч. указанные по ссылке очень просто) не запускали Explorer.exe с повышенными правами и, соответственно перетаскивание не срабатывало. Да, другие процессы по таким схемам срабатывают как часы, но проводник нет.
По поводу архивирования папок в корне диска сообщаю: есть такая несравнимо удобная команда меню (за что огромное спасибо разработчикам WinRAR), так вот, при ее использовании и создается архив там же, где расположена архивируемая папка (что очень удобно), т.е. в корне диска (т.о. создается «файл», а не «папка»). Как же тут не быть проблеме.
Vadim Sterkin, вы своеобразно выразились на счет отказа хранения в корне диска, написав «данных». Под этим просматривается как «файлы», так и «папки». Насчет файлов, частично с Вами согласен, а уж насчет «папок» хочется сказать: может вообще запретить запись чего-либо в корень?? (кстати, прошу обратить внимание на то, где предлагается создать папку «cmdtools» по предложенному Вами обходному пути-двойные стандарты получаются).
К тому же данные записываются в корень не только для хранения, но это уже совсем другая тема.
Все же считаю целесообразным процесс перетаскивания через MIC не контролировать, или выдавать запрос на выполнение операции. Надеюсь соответствующие должностные лица об этом услышат.
Этот форум — не форум официальной техподдержки, как здесь уже неоднократно упоминалось. Так что представителей Microsoft здесь крайне мало, если не считать нескольких модераторов.
Самым оптимальным способом донести свои пожелания до разработчиков будет отправка отзыва через специальную форму — в объявлениях раздела Windows7 есть на нее ссылка.
Мнения, высказанные здесь, являются отражением моих личных взглядов, а не позиции корпорации Microsoft. Вся информация предоставляется «как есть» без каких-либо гарантий
Незнаю, как Вам удавалось открывать папку в отдельном процессе проводника с повышенными правами, т.к. такие манипуляции (в т.ч. указанные по ссылке очень просто) не запускали Explorer.exe с повышенными правами и, соответственно перетаскивание не срабатывало. Да, другие процессы по таким схемам срабатывают как часы, но проводник нет.
А, сорри, я не обратил внимания, что товарищ там упустил один важный момент 🙂 Это работало в Vista, но не в 7 — тут запрос появляется, но повышения не происходит.
UPD. Я описал это в блоге:
И все нормально перетаскивается.
По поводу архивирования папок в корне диска сообщаю: есть такая несравнимо удобная команда меню (за что огромное спасибо разработчикам WinRAR), так вот, при ее использовании и создается архив там же, где расположена архивируемая папка (что очень удобно), т.е. в корне диска (т.о. создается «файл», а не «папка»). Как же тут не быть проблеме.
Опять же, проводник работает с обычными правами, и архиватор вызывается из контекстного меню тоже с такими правами. Поэтому прав на запись файла и нет. Теоретически это тоже можно обойти, создав свой пункт в меню, но я не буду вдаваться в подробности. Потому что.
Потому что есть понятие best practices (лучшие практики). Вы, как ИТ-специалист, не просто должны им следовать, но и объяснить персоналу, а при необходимости форсировать их. Если вы работаете с UAC, даже админом, у вас права обычного пользователя. Обычный пользователь должен хранить свои данные (файлы и документы) в профиле, т.е. в пользовательских папках, а не в корне системного диска или в Program Files.
Если вы складываете свои архивы в Program Files, это труба. Папка ведь не для этого предназначена. Наверняка, вы их потом перекидываете куда-то. Так в этом случае надо выбирать «Добавить к архиву» и указывать папку, куда есть права на запись, вот и все.
Насчет файлов, частично с Вами согласен, а уж насчет «папок» хочется сказать: может вообще запретить запись чего-либо в корень?? (кстати, прошу обратить внимание на то, где предлагается создать папку «cmdtools» по предложенному Вами обходному пути-двойные стандарты получаются).
Да, надо запретить, по тем же причинам ^^ И не надо меня ловить на двойных стандартах — ясно же, что статью писал другой человек, а я просто указал направление.
С учетом всего сказанного в теме, предлагаю модераторам перевести тему обратно в разряд вопросов и пометить решенной, поскольку:
- Поведению UAC дано логическое объяснение
- Отдельно объяснено, что это поведение «by design», как пишут в MS KB.
- Указан работающий обходной путь.
- Разъяснены принципы правильной работы с UAC