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# - 拖放问题(与海拔无关)的主要内容,如果未能解决你的问题,请参考以下文章

请求 UAC 海拔 c#

C# ListBox 不允许拖放

C#在拖放时在ListView中实现自动滚动

在 C# 托盘中拖放 NotifyIcon

Silverlight & Blend动画设计系列八:拖放(Drag-Drop)操作与拖放行为(DragBehavior)

Silverlight & Blend动画设计系列八:拖放(Drag-Drop)操作与拖放行为(DragBehavior)