Vista & C# - 拖放问题(与海拔无关)
Posted
技术标签:
【中文标题】Vista & C# - 拖放问题(与海拔无关)【英文标题】:Vista & C# - Drag & Drop problem (not related to elevation) 【发布时间】:2010-10-10 17:36:05 【问题描述】:有问题的应用程序是 .Net 2.0 Framework WinForms。它应该适用于大型用户群(从 CD 安装)。使用 InnoSetup 完成安装。
在两台机器上,应用程序不接受拖放(应用程序和 D&D 的源具有相同的海拔高度)。
通过为应用程序快捷方式的 INTERACTIVE SID 添加 Read & Read&Execute 权限,似乎解决了这个问题。
问题:添加这些权限和D&D是如何关联的,以及如何在安装过程中检查/设置这些权限?
【问题讨论】:
此外,这也与程序的安装位置有关 - 如果它安装在程序文件之外(“受信任的位置”),它将表现不佳。 好问题,不知道答案。 最近遇到了类似的情况,遇到了奇怪的大规模部署问题(还有 winforms 和 .net 2.0)。如果您发现它不仅限于 Vista,我也不会感到非常惊讶。我遇到了一些问题,最初似乎只发生在 vista 上,但几周后才发现它发生在特定的 XP 机器上。 【参考方案1】:你有两个问题:
添加这些权利和 D&D 之间的关系以及...
这我完全不确定。我们在 WinForm 应用程序中使用 D&D 与 shell 和 Outlook 往来,在 Vista 中没有任何问题。我什至不确定您建议的 ACL 更改是否能解决您遇到的任何问题。
如何在安装过程中检查/设置这些权限?
执行此操作的简单方法是 create a .Net install class 并添加以下代码:
public static void ReplacePermissions(string filepath, WellKnownSidType sidType, FileSystemRights allow)
FileSecurity sec = File.GetAccessControl(filepath);
SecurityIdentifier sid = new SecurityIdentifier(sidType, null);
sec.PurgeAccessRules(sid); //remove existing
sec.AddAccessRule(new FileSystemAccessRule(sid, allow, AccessControlType.Allow));
File.SetAccessControl(filepath, sec);
【讨论】:
【参考方案2】:只是在黑暗中拍摄,但您的应用程序的 Main() 方法中是否存在 [STAThread] 属性?没有它,拖放根本不起作用。 (尽管这无法解释随着 INTERACTIVE SID 权限变化而导致的行为变化)。
【讨论】:
是的,当然,它就在那里。此外,这个问题仅在 2 台(测试的 50 台)机器上出现。 是的,但线程问题可能与 Windows.Forms 有随机行为。可能在某些机器上工作而在其他机器上失败。【参考方案3】:您应该直接在 Visual Studio 环境之外运行项目的 exe 文件。我正在使用 Windows Vista 平台。
【讨论】:
以上是关于Vista & C# - 拖放问题(与海拔无关)的主要内容,如果未能解决你的问题,请参考以下文章
Silverlight & Blend动画设计系列八:拖放(Drag-Drop)操作与拖放行为(DragBehavior)
Silverlight & Blend动画设计系列八:拖放(Drag-Drop)操作与拖放行为(DragBehavior)