我使用管理员角色打开系统,操作注册表。但是现在我有个listview需要拖拽文件,然后就发现使用管理员角色打开系统,拖拽文件就没用了。
1 #region listview拖拽事件 2 private void listViewFolder_DragDrop(object sender, DragEventArgs e) 3 { 4 try 5 { 6 String[] files = e.Data.GetData(DataFormats.FileDrop, false) as String[]; //必须用数组接收 7 string[] filters = ".doc|.ppt|.xlsx|.pdf|.txt".Split('|'); 8 int result = 0; 9 foreach (string item in files) 10 { 11 foreach (string filter in filters) 12 { 13 if (item.Contains(filter)) 14 { 15 BindListviewData(item); 16 result = 1; 17 } 18 } 19 } 20 if (result == 0) 21 MessageBoxForm.Show("系统提示", "文件格式不支持,请选择正确的格式!目前支持的文件格式有DOCX(DOC),PPTX(PPT), \r\n Excel,PDF,TXT"); 22 } 23 catch (Exception e1) 24 { 25 MessageBoxForm.Show("警告", e1.Message); 26 } 27 } 28 29 private void listViewFolder_DragEnter(object sender, DragEventArgs e) 30 { 31 if (e.Data.GetDataPresent(DataFormats.FileDrop)) 32 { 33 e.Effect = DragDropEffects.Copy; 34 } 35 else 36 { 37 e.Effect = DragDropEffects.None; 38 } 39 } 40 41 private void listViewFolder_ItemDrag(object sender, ItemDragEventArgs e) 42 { 43 if (e.Button == MouseButtons.Left) 44 { 45 if (this.listViewFolder.SelectedItems.Count <= 0) 46 { 47 return; 48 } 49 50 //put selected files into a string array 51 52 string[] files = new String[this.listViewFolder.SelectedItems.Count]; 53 54 int i = 0; 55 foreach (ListViewItem item in this.listViewFolder.SelectedItems) 56 { 57 files[i++] = item.Tag.ToString(); 58 } 59 60 //create a dataobject holding this array as a filedrop 61 62 DataObject data = new DataObject(DataFormats.FileDrop, files); 63 64 //also add the selection as textdata 65 66 data.SetData(DataFormats.StringFormat, files[0]); 67 68 //Do DragDrop 69 DoDragDrop(data, DragDropEffects.Copy); 70 } 71 } 72 #endregion
就是这么规定的,你想干啥?
我就是想在管理员打开的系统里面,使用listview拖拽
@lee_mosquito: 就是这么规定的,就是不让托。你只有两条路,一是提供一个打开文件的菜单,无法拖拽时使用此菜单实现功能;二是将你的程序的权限降级。
再加一个条路,你的程序应该始终以普通权限运行,对于需要管理员权限的操作使用另一个进程来实现。
@Launcher: 你的意思是,在winform里面去调用管理员的控制台程序去操作注册表吗?
@lee_mosquito: 是不是控制台程序不重要,看你的需求而已。
@Launcher: 一楼提到了UAC,能否从这方面解决问题呢?
@lee_mosquito: 你是不是到现在还不明白你这个问题同 UAC 的关系?我给你提供的思路就是教你写 UAC 兼容的程序。UAC 就是这么规定的,只能从权限高的进程向同级权限或较低权限的进程拖拽。UAC 就这么规定了,你从 UAC 这方面解决问题的办法就是让两个进程的权限符合规定。也就是说,我给你提供的解决方案就是从 UAC 这方面来考虑的。
@Launcher: 谢谢啊,我明白了,那么结贴了
你的意思是,使用管理员权限,就不能拖拽?这不科学!
亲,这是真的,你可以去试试!
@lee_mosquito: 好吧,我查了下资料,发现确实有禁止拖拽这个限制。
看看这篇文章是否对你有帮助:http://www.cnblogs.com/wurang/p/3793907.html
@幻天芒: 好的,谢谢