【问题标题】:Vista & C# - Drag & Drop problem (not related to elevation)Vista & C# - 拖放问题(与海拔无关)
【发布时间】: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 机器上。

标签: c# winforms drag-and-drop inno-setup


【解决方案1】:

你有两个问题:

  1. 添加这些权利和 D&D 之间的关系以及...

这我完全不确定。我们在 WinForm 应用程序中使用 D&D 与 shell 和 Outlook 往来,在 Vista 中没有任何问题。我什至不确定您建议的 ACL 更改是否能解决您遇到的任何问题。

  1. 如何在安装过程中检查/设置这些权限?

执行此操作的简单方法是 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 平台。

    【讨论】:

      猜你喜欢
      • 2016-12-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-11-07
      • 1970-01-01
      • 1970-01-01
      • 2018-03-09
      相关资源
      最近更新 更多