有问题的应用程序是 .Net 2.0 Framework WinForms。它应该适用于大型用户群(从 CD 安装)。使用 InnoSetup 完成安装。
在两台机器上,应用程序不接受拖放(应用程序和 D&D 的源都具有相同的海拔高度)。
通过为应用程序快捷方式的 INTERACTIVE SID 添加 Read & Read&Execute 权限,似乎解决了这个问题。
问题:添加这些权限和 D&D 是如何关联的,以及如何在安装过程中检查/设置这些权限?
有问题的应用程序是 .Net 2.0 Framework WinForms。它应该适用于大型用户群(从 CD 安装)。使用 InnoSetup 完成安装。
在两台机器上,应用程序不接受拖放(应用程序和 D&D 的源都具有相同的海拔高度)。
通过为应用程序快捷方式的 INTERACTIVE SID 添加 Read & Read&Execute 权限,似乎解决了这个问题。
问题:添加这些权限和 D&D 是如何关联的,以及如何在安装过程中检查/设置这些权限?
您在这里有两个问题:
- 添加这些权利和 D&D 是如何相关的,并且...
这我完全不确定。我们在 WinForm 应用程序中使用 D&D 与 shell 和 Outlook 交互,在 Vista 中没有任何问题。我什至不确定您建议的 ACL 更改一定会解决您遇到的任何问题。
- 如何在安装过程中检查/设置这些权限?
最简单的方法是创建一个 .Net 安装类并添加以下代码:
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);
}
您应该直接在 Visual Studio 环境之外运行项目的 exe 文件。我正在使用 Windows Vista 平台。
只是在黑暗中拍摄,但您的应用程序的 Main() 方法中是否存在 [STAThread] 属性?没有它,拖放将根本不起作用。(尽管这无法解释随着 INTERACTIVE SID 权限变化而导致的行为变化)。