locked
Не работает перетаскивание (Drag and Drop) файлов в некоторые сторонние приложения (не входящие в состав операционной системы Windows Vista/7) RRS feed

  • Вопрос

  • Пытаюсь с рабочего стола (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
    • Изменен тип Vinokurov Yuriy 22 июня 2011 г. 8:56 давность и отсутствие активности в теме
    • Изменен тип Vinokurov Yuriy 6 июля 2011 г. 2:58
    21 мая 2011 г. 22:00

Все ответы

  • Для начала sfc /scannow. Плюс еще вот какой момент - у вас UAC не отключен? Если отключен и программы, в которые вы перетаскиваете файлы, запускаются с повышенными привилегиями (щит на значке программы), то возможна подобная картина.
    Мнения, высказанные здесь, являются отражением моих личных взглядов, а не позиции корпорации Microsoft. Вся информация предоставляется "как есть" без каких-либо гарантий
    Follow MSTechnetForum on Twitter

    Посетите Блог Инженеров Доклады на Techdays: http://www.techdays.ru/speaker/Vinokurov_YUrij.html
    17 июня 2011 г. 9:38
  •  UAC действительно отключен и для архиватора требуются повышенные привилегии. Нарушений в системных файлах естественно нет. Не может быть, что проблема только у меня.

    • Изменено vbAlexey 4 июля 2011 г. 20:00 выключение UAC устраняло проблему
    29 июня 2011 г. 5:55
  • Протестировал, подтверждаю - для WinRar 3.93 и 4.01 наблюдается данный баг в ОС Vista и Windows 7. Удалось заметить, что при попытке добавления файла возникает ошибка отказа в доступе. Поскольку WinRar не ведет логов, то выяснить, к чему конкретно выдан отказ в доступе, затруднительно. Рекомендую пообщаться с разработчиком на этот счет. По поводу вашего приложения - выясняйте, куда в процессе перетаскивания идет промежжуточная запись и что с правами на это размещение.
    Мнения, высказанные здесь, являются отражением моих личных взглядов, а не позиции корпорации Microsoft. Вся информация предоставляется "как есть" без каких-либо гарантий
    Follow MSTechnetForum on Twitter

    Посетите Блог Инженеров Доклады на Techdays: http://www.techdays.ru/speaker/Vinokurov_YUrij.html
    29 июня 2011 г. 6:58
  • Долгими кропотливыми тестами удалось выяснить, что проблема исчезает, как только ПО запускается НЕ от имени администратора. Как только запущено от администратора (а очень часто это необходимо для архивации системных или иных, требующих права администратора, файлов) - баг. Надеюсь информация будет полезной для совершенствования ОС в части совместимости с предыдущими версиями Windows. Хотелось бы заметить, что в настройках у меня стоит постоянный запуск от администратора. Заранее спасибо.
    3 июля 2011 г. 10:26
  • Дополнительно сообщаю, что любая программа, запущенная от имени администратора показывает тот же баг при перетаскивании (проверено на QIP, Word, Internet Explorer, КОМПАС-3D V11, Total Commander).
    3 июля 2011 г. 10:35
  • Дополнительно сообщаю, что любая программа, запущенная от имени администратора показывает тот же баг при перетаскивании (проверено на QIP, Word, Internet Explorer, КОМПАС-3D V11, Total Commander).
    конкретно с перетаскиванием - не баг, под аккаунтом с административными привилегиями всё правильно - технически это попытка потока с Low integrity level получить доступ к данным потока с High integrity level: не будет работать... смущает только одно - вы утверждаете, что UAC у вас отключен: в этом случае все потоки стартуют с административным токеном, но вот касательно уровней целостности... а как именно у вас "UAC действительно отключен"? навскидку не скажу, да и времени особо нет: коллеги продвинутые, вопрос к вам - влияет ли как-либо UAC на Integrity Control?

    http://en.wikipedia.org/wiki/Mandatory_Integrity_Control
    3 июля 2011 г. 12:10
    Отвечающий
  • Выглядит багом, но не баг :) Я объяснял это поведение 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

     


    Just be nice!
    • Предложено в качестве ответа AndricoRusEditor 6 июля 2011 г. 9:26
    3 июля 2011 г. 17:03
  • Т.е. если UAC работает и файл перетаскивается в приложение, запущенное под администратором, то не быть перетаскиванию вообще? Понятно, если производятся попытки записи в системные папки, реестр или остановка системных служб, то MIC должен работать, но при чем тут перетаскивание? Считаю целесообразным его через MIC не проводить, или, в конце концов, выдавать запрос на выполнение операции.
    3 июля 2011 г. 20:17
  • Т.е. если UAC работает и файл перетаскивается в приложение, запущенное под администратором, то не быть перетаскиванию вообще?


    Смотря откуда вы перетаскиваете. Если из проводника, то да, по умолчанию он запускается с обычными правами. В общем, я по ссылке выше объяснил уже это, да и про причины там тоже сказано, равно как и парой постов выше.

    В чем конкретно ваша проблема? Если WinRar запущен с обычными правами, то перетащить в него файл из проводника не проблема. Если только это не баг программы. Если же вы запускаете его с полными правами, то... зачем?

    1. Обновите WinRAR,

    2. Запишите процесс вашего перетаскивания с помощью Пуск - Поиск - psr. Включите в запись настройки UAC.

    3. Выложите на skydrive.com.


    Just be nice!
    4 июля 2011 г. 10:46
  • Vadim Sterkin, перетаскиваю из проводника. То, что сказано по ссылке - с этим все понятно. По поводу UAC поясню - отключался он на время тестирования, когда Vinokurov Yuriy сообщил, что "Если отключен .... то возможна подобная картина", поэтому он был включен обратно.

    По поводу ранее сказанного "включение/выключение UAC ничего не меняет" вношу коррективы: выключение в тот момент UAC не было введено в действие, т.к. ПК не перезагружался (либо сообщение не высветилось или не было замечено). Тем не менее суть остается неизменной, а именно:

    1. отличий архиватора, от остальных программ, поддерживающих перетаскивание, в данной ситуации не замечено (т.е. бага архиватора нет);
    2. запускаем его с полными правами, затем, что при необходимости заархивировать папку/файл в корне диска, Program Files и т.п., то крайне неудобно и долго проделывать весь этот процесс: лезть в папку программы, ставить административные права, снова архивировать и снимать  административные права; вот случилось так, что не пользователь я простой - не просто скидываю файл в мои документы и читаю его, а выполняю постоянно системные и прочие настройки - на что учетная запись администратора??
    3. проблема остается быть проблемой, т.к. решения до сих пор не озвучено (предложено мной ранее: а) перетаскивание не контролировать через MIC. б) выдавать запрос на выполнение операции).

    В связи с вышеизложенным не вижу целесообразности вновь записывать проблемы перетаскивания, т.к. запись выложена в первом сообщении.

    P.S. Если MIC призван отнять у пользователя (какой бы он не был админ) права на изменение разрешений взаимодействия объектов с более низким уровнем, чем у другого объекта, то отключил UAC и MIC не работает...

    4 июля 2011 г. 19:55
  • vbAlexey, теперь соврешенно понятно, что вы запускаете архиватор с полными правами, отсюда и проблема. Полноценное решение может предоставить только Microsoft в будущих ОС, но за две последних этого не произошло, так что не надейтесь особо.

    Могу вам предложить два обходных пути:

    1. Отказаться от перетаскивания, т.е. открывать папки из архиватора, запущенного с полными правами. Сомневаюсь, что этот путь вас устроит, однако он проще, чем вы описали это в п. 2 выше. В т.ч. не забывайте о возможности копировать путь из адресной строки и вставлять в архиватор.
    2. Открывать архивируемую папку в отдельном процессе проводника с повышенными правами (добавить соотв. пункт в контекстное меню очень просто). Это лучший путь в вашей ситуации - открыли родительскую папку и перетащили нужную дочернюю в архиватор.

    Отдельно замечу, что проблем с архивированием папок в корне диска быть не должно, т.к. на их создание не требуются полные права в отличие от файлов. Однако от практики хранения данных в корне диска нужно отказываться, если вы работаете в проводнике с его библиотеками, поиском и т.д. Иначе вы проигрываете в эффективности...

     


    Just be nice!


    5 июля 2011 г. 10:35
  • Vadim Sterkin, естественно решение может предоставить только Microsoft, я же не на какую-то иную тех.поддержку пишу. Однако, непосредственно представителей и не слышно.

    На самом деле обходных путей достаточно уже опробовано, даже помимо 2-ух вышеуказанных, вплоть до использования предыдущих версий ОС (да, к сожалению не все юзеры, которых работа научила получать бо'льшую пользу от компьютера, готовы в момент перейти в прилично обновленную среду), НО все они (обх. пути) снова и снова приводят к желанию наконец-то внести изменения в ОС. 

    Незнаю, как Вам удавалось открывать папку в отдельном процессе проводника с повышенными правами, т.к. такие манипуляции (в т.ч. указанные по ссылке очень просто) не запускали Explorer.exe с повышенными правами и, соответственно перетаскивание не срабатывало. Да, другие процессы по таким схемам срабатывают как часы, но проводник нет.

    По поводу архивирования папок в корне диска сообщаю: есть такая несравнимо удобная команда меню <Добавить в архив "Имя_папки.rar"> (за что огромное спасибо разработчикам WinRAR), так вот, при ее использовании и создается архив там же, где расположена архивируемая папка (что очень удобно), т.е. в корне диска (т.о. создается "файл", а не "папка"). Как же тут не быть проблеме.

    Vadim Sterkin, вы своеобразно выразились на счет отказа хранения в корне диска, написав "данных". Под этим просматривается как "файлы", так и "папки". Насчет файлов, частично с Вами согласен, а уж насчет "папок" хочется сказать: может вообще запретить запись чего-либо в корень?? (кстати, прошу обратить внимание на то, где предлагается создать папку "cmdtools" по предложенному Вами обходному пути-двойные стандарты получаются). 

    К тому же данные записываются в корень не только для хранения, но это уже совсем другая тема.

    Все же считаю целесообразным процесс перетаскивания через MIC не контролировать, или выдавать запрос на выполнение операции. Надеюсь соответствующие должностные лица об этом услышат.


    • Изменено vbAlexey 5 июля 2011 г. 15:07 подправлены неточности
    5 июля 2011 г. 15:06
  • Этот форум - не форум официальной техподдержки, как здесь уже неоднократно упоминалось. Так что представителей Microsoft здесь крайне мало, если не считать нескольких модераторов.

    Самым оптимальным способом донести свои пожелания до разработчиков будет отправка отзыва через специальную форму - в объявлениях раздела Windows7 есть на нее ссылка.


    Мнения, высказанные здесь, являются отражением моих личных взглядов, а не позиции корпорации Microsoft. Вся информация предоставляется "как есть" без каких-либо гарантий
    Follow MSTechnetForum on Twitter

    Посетите Блог Инженеров Доклады на Techdays: http://www.techdays.ru/speaker/Vinokurov_YUrij.html
    5 июля 2011 г. 15:12
  • vbAleksey

    Незнаю, как Вам удавалось открывать папку в отдельном процессе проводника с повышенными правами, т.к. такие манипуляции (в т.ч. указанные по ссылке очень просто) не запускали Explorer.exe с повышенными правами и, соответственно перетаскивание не срабатывало. Да, другие процессы по таким схемам срабатывают как часы, но проводник нет.

    А, сорри, я не обратил внимания, что товарищ там упустил один важный момент :) Это работало в Vista, но не в 7 - тут запрос появляется, но повышения не происходит.

    UPD. Я описал это в блоге:

    И все нормально перетаскивается.

    По поводу архивирования папок в корне диска сообщаю: есть такая несравнимо удобная команда меню <Добавить в архив "Имя_папки.rar"> (за что огромное спасибо разработчикам WinRAR), так вот, при ее использовании и создается архив там же, где расположена архивируемая папка (что очень удобно), т.е. в корне диска (т.о. создается "файл", а не "папка"). Как же тут не быть проблеме.

    Опять же, проводник работает с обычными правами, и архиватор вызывается из контекстного меню тоже с такими правами. Поэтому прав на запись файла и нет. Теоретически это тоже можно обойти, создав свой пункт в меню, но я не буду вдаваться в подробности. Потому что...

    Потому что есть понятие best practices (лучшие практики). Вы, как ИТ-специалист, не просто должны им следовать, но и объяснить персоналу, а при необходимости форсировать их. Если вы работаете с UAC, даже админом, у вас права обычного пользователя. Обычный пользователь должен хранить свои данные (файлы и документы) в профиле, т.е. в пользовательских папках, а не в корне системного диска или в Program Files.

    Если вы складываете свои архивы в Program Files, это труба. Папка ведь не для этого предназначена. Наверняка, вы их потом перекидываете куда-то. Так в этом случае надо выбирать "Добавить к архиву" и указывать папку, куда есть права на запись, вот и все.

    Насчет файлов, частично с Вами согласен, а уж насчет "папок" хочется сказать: может вообще запретить запись чего-либо в корень?? (кстати, прошу обратить внимание на то, где предлагается создать папку "cmdtools" по предложенному Вами обходному пути-двойные стандарты получаются). 

    Да, надо запретить, по тем же причинам ^^ И не надо меня ловить на двойных стандартах - ясно же, что статью писал другой человек, а я просто указал направление.

    С учетом всего сказанного в теме, предлагаю модераторам перевести тему обратно в разряд вопросов и пометить решенной, поскольку:

    1. Поведению UAC дано логическое объяснение
    2. Отдельно объяснено, что это поведение "by design", как пишут в MS KB.
    3. Указан работающий обходной путь.
    4. Разъяснены принципы правильной работы с UAC

    :)


    Just be nice!





    • Изменено Vadim Sterkin 1 августа 2011 г. 8:41 добавлены ссылки на статьи в подробные статьи в блоге
    5 июля 2011 г. 20:51
  • Вадим, браво :) Однако с пометкой подождем до сообщения автора - смог он добиться цели, или нет. У меня, во всяком случае, этот номер не прошел.
    Мнения, высказанные здесь, являются отражением моих личных взглядов, а не позиции корпорации Microsoft. Вся информация предоставляется "как есть" без каких-либо гарантий
    Follow MSTechnetForum on Twitter

    Посетите Блог Инженеров Доклады на Techdays: http://www.techdays.ru/speaker/Vinokurov_YUrij.html
    6 июля 2011 г. 3:10
  • Уважаемый Vadim Sterkin, Ваши напористые навыки удивляют, но неофициальных путей, которые неизвестно к каким последствиям могут привести в будущем, мы не используем (поэтому описанный обходной путь остается без комментариев). Как было описано ранее:

    1. способов перепробовано не мало (все они приводят к желанию наконец-то внести изменения в ОС официально);
    2. "этот форум - не форум официальной техподдержки" - посему проблема размещена несколько не по адресу (т.е. требуются не обходные пути, а устранение проблемы "на корню").

    С таким же успехом мы могли в архиваторе неофициально использовать вызов:

     

    ChangeWindowMessageFilter (WM_DROPFILES, MSGFLT_ADD);

    ChangeWindowMessageFilter (WM_COPYDATA, MSGFLT_ADD);

    ChangeWindowMessageFilter (0x0049, MSGFLT_ADD);

     

    но, во-первых, последствия для безопасности ОС Vista в этом случае не до конца ясны (хотя в семерке ситуацию несколько улучшает наличие ChangeWindowMessageFilterEx). Во-вторых, 0x0049 это внутреннее сообщение Windows, не документированное официально. Использовать недокументированные сообщения чревато непредсказуемостью поведения программ в следующих версиях Windows, да и просто не рекомендуется.
    Насчет "вы складываете свои архивы в Program Files, это труба", уважаемый Vadim Sterkin, у Вас недостаточно сведений, поэтому Ваше предположение ошибочно. По поводу "перекидывания куда-то" Вы более близки к истине, однако не хотелось бы вступать в полимику по местам хранения (в т.ч. временного) файлов и папок.
    Разъяснения по поведению и принципам работы UAC не требовались, ровно также, как и обходные пути.
    Vinokurov Yuriy, схема работает и даже безо всяких NirCmd.
    На основании вышеизложенного не вижу целесообразности продолжать данную тему здесь. Спасибо.
    6 июля 2011 г. 7:10
  • Юрий, на самом деле не важно, работает мой обходной путь или нет, ибо правильный ответ на вопрос автора темы - это нормальное поведение ОС (this behavior is by design, как пишут в KB). Это и есть решение, другого не дано. Понятно, что оно не устраивает автора темы, но с тем же успехом можно огорчаться тому, что в банке не выдают $100500, если их нет на счету :)

    Я специально выкладывал видео, демонстрирующее подтверждение концепции. И если что-то не работает, значит, что-то неправильно делается (например, проводник не запускается с повышением в отдельном процессе). Nircmd здесь лишь мостик к созданию пункта контекстного меню, но можно просто настроить отдельные процессы в свойствах папки.

    Но опять же, это все не столь важно, потому что данный обходной путь не поддерживается Microsoft, т.к. идет вразрез с моделью безопасности Windows.

    vbAlexey, ваш нежелание использовать недокументированные возможности мне абсолютно понятно. Но вы продолжали дискуссию даже после того, как получили ответ на вопрос. Поэтому я продемонстрировал вам решение, причем было неочевидно, что оно вам известно.

    Мне бы тоже хотелось, чтобы Microsoft изменила поведение перетаскивания в следующей  версии ОС, но я не возлагаю особых надежд - они для юношей :)

    Удачи!

     


    Just be nice!
    • Изменено Vadim Sterkin 1 августа 2011 г. 8:43 ссылка на видео удалена (неактуально)
    6 июля 2011 г. 9:03