2010-12-20 28 views
2

我有一個用戶正在Win7上運行我的Winforms應用程序。我的應用程序允許用戶從打開的Excel電子表格中選擇行並拖放到應用程序中。但是,該用戶不能執行拖放操作。光標變爲「no」光標(帶有直線的小圓圈),操作無法完成。在Win7機器上拖放到我的應用程序

我在研究drag-n-drop和Win7以及我發現指向UAC和/或UIPI的所有內容。我一直在尋找一些解決方案,我不知道任何的下面將工作:

  • 如果用戶以管理員身份登錄(並因此運行我的應用程序作爲管理員)將允許拖N-下班去上班?

  • 用戶是否需要關閉或更改UAC/UIPI的設置才能拖放?

我不確定是什麼問題。我的應用程序通常從C:/ Documents and Settings/...(C:/ Users/...在Win7上)運行。它是從物質運行的地方?拖放不工作是因爲用戶沒有以足夠的權限運行我的應用程序?他的Excel和我的應用在不同的權限級別上?如果是這樣,那可以做些什麼?請注意,儘管我的應用程序允許用戶直接拖動文件,但這也不起作用。

另外,有沒有什麼辦法可以讓用戶用其他應用程序重現此問題?是否有Win7附帶的應用程序可以看到相同的問題。例如,這可以使用記事本來重現嗎?

謝謝。

+1

嘗試跨安全邊界拖放時存在限制。如果源和目的地在相同的安全級別上運行(即標準用戶或兩者都提升),那麼應該沒有問題。 – 2010-12-20 17:10:39

+0

應用程序的這些安全級別是如何決定的?我假設用戶不是他的機器上的管理員。所以如果他只是正常運行Excel,那麼使用什麼安全級別?如果他只是雙擊運行我的應用程序,我的應用程序安全級別是什麼?我對Win7安全功能瞭解不多。這一切都是由UAC中的設置決定的嗎? – Flack 2010-12-20 17:24:56

+0

您需要購買Windows Vista或Windows 7機器,並親自嘗試一下!沒有這些,你無法真正成爲UAC的頂峯。 – 2010-12-20 17:33:32

回答

4

通過UIPI解釋這個問題是一個非常長期拉伸。它與用戶是否以管理員身份登錄沒有任何關係,不影響UAC,並且您的程序無論如何都將使用同一帳戶運行。 UIPI可以啓動停止D + D的唯一方法是當您的程序被提升並且Excel不是。

爲了讓自己升高需要工作,而不是偶然發生。你必須包含一個清單,以便用戶得到UAC提示,你就會知道這一點。或者用戶必須更改桌面快捷方式並勾選「以管理員身份運行此程序」選項,她對此非常瞭解。雖然UIPI可以繞過Windows消息(ChangeWindowMessageFilter),但它不能拖放,所以如果任何高程正在進行,那麼你的卡住了。最終的測試是簡單地要求用戶將UAC滑塊完全放下。

更可能的情況是您的DragEnter事件處理程序對它所看到的數據不滿意,因此不會分配e.Effect屬性。如果現場無法獲得調試器,則編寫一個測試程序,記錄e.Data.GetFormats()的值以及您用來檢查是否可以接受的任何其他值。不要忘記顯而易見的事情:用戶只需簡單地摸索拖拽。

+0

感謝您的信息。我不認爲這是由於數據被丟棄。使用與用戶相同的版本和相同版本的Excel,就在WinXP上,一切正常。此外,用戶可以使用我的應用程序的「導入」按鈕而不是拖放操作來打開Excel文件。這樣,他只需使用標準文件瀏覽器對話框選擇它。我想我會要求用戶臨時設置UAC滑塊,看看是否有任何影響。 – Flack 2010-12-20 18:01:54

+0

@Flack如何開發Windows系統而無需訪問UAC?我傾向於同意漢斯的觀點,即UIPI不是最可能的罪魁禍首。 – 2010-12-20 19:20:09

+0

@David該應用程序是非常古老的應用程序,在Win7上只有幾個用戶。我可以訪問Win7機器,但是我最初發現和發佈的內容僅僅是來自谷歌的粗略搜索。我要用我的Win7機器做一些測試,看看我能找到什麼。因爲幾乎所有的現有用戶仍然使用XP,所以之前從未真正需要處理UAC。謝謝您的幫助 :) – Flack 2010-12-20 20:23:16

相關問題