Перетащите на Win7 машину в мое приложение - PullRequest
2 голосов
/ 20 декабря 2010

У меня есть пользователь, который в настоящее время запускает мое приложение Winforms на Win7.Мое приложение позволяет пользователям выбирать строки в открытой электронной таблице Excel и перетаскивать их в приложение.Однако этот пользователь не может выполнять перетаскивание.Курсор изменится на курсор «нет» (маленький кружок с линией через него), и операция не будет завершена.

Я исследовал drag-n-drop и Win7, и все, что я нашел, указывает на UAC и /или UIPI.Я искал некоторые решения и не уверен, будет ли работать любое из нижеперечисленного:

  • Если пользователь войдет в систему как администратор (и в результате запустит мое приложение как администратор), это будетразрешить работу drag-n-drop?

  • Нужно ли пользователю отключать или изменять настройки UAC / UIPI для возможности перетаскивания?

Я не уверен, в чем проблема.Мое приложение обычно запускается из C: / Documents and Settings / ... (C: / Users / ... на Win7).Неужели откуда оно бежит из материи?Перетаскивание не работает, потому что пользователь не запускает мое приложение с достаточными разрешениями?Находятся ли его Excel и мое приложение на разных уровнях разрешений?Если так, что с этим можно сделать?Обратите внимание, что хотя мое приложение позволяет пользователям просто перетаскивать файл напрямую, это тоже не работает.

Кроме того, есть ли способ заставить пользователя воспроизвести эту проблему с другими приложениями?Существуют ли приложения, которые поставляются с Win7, с которыми он видит ту же проблему.Например, можно ли это воспроизвести с помощью Блокнота?

Спасибо.

1 Ответ

4 голосов
/ 20 декабря 2010

Объяснение этой проблемы с помощью UIPI - это очень длинный отрезок. Это не имеет никакого отношения к тому, вошел ли пользователь в систему как администратор, это не влияет на UAC, и ваша программа все равно будет работать с той же учетной записью. Единственный способ, которым UIPI может включить D + D, - это когда ваша программа повышена, а Excel - нет.

Чтобы подняться, нужна работа, а не случайно. Вы должны будете включить манифест, чтобы пользователь получил приглашение UAC, вы бы знали об этом. Или пользователь должен будет изменить ярлык на рабочем столе и установить флажок «Запускать программу от имени администратора», он знает об этом. В то время как UIPI можно обойти для сообщений Windows (ChangeWindowMessageFilter), он не может для перетаскивания, поэтому, если происходит повышение прав, то вы застряли. Конечный тест - просто попросить пользователя полностью опустить ползунок UAC.

Гораздо более вероятный сценарий состоит в том, что ваш обработчик событий DragEnter просто недоволен данными, которые он видит, и поэтому не назначает свойство e.Effect. Если вы не можете получить отладчик на месте, напишите небольшую тестовую программу, которая регистрирует значения e.Data.GetFormats () и все остальное, что вы используете, чтобы проверить, приемлемо ли удаление. И не забывайте очевидное: пользователь просто как-то шарит в перетаскивании.

...