使用普通c ++或java设置文件夹权限

时间:2011-11-16 09:33:24

标签: java c++ windows

我正在维护使用J2SE开发的软件(但我是c#开发人员实际上没有Java的丰富经验)。该软件使用access作为数据存储区,此访问数据库存储在db文件夹中。当用户从“标准用户”而非管理员安装此应用程序时,在Windows 7或Vista中,他无法获得db文件夹的权限。要使软件运行,我们需要为当前用户(标准用户)添加“修改”权限。

实际上我搜索了如何使用Java做到这一点,但没有发现任何东西,但我找到的资源很少,但还不够。问题是“如何在c ++(旧的c ++而不是.net)或使用Java的情况下向当前登录的用户授予”修改“权限?

2 个答案:

答案 0 :(得分:2)

MSDN文章"Modifying the ACLs of an Object in C++"中提供的功能完成了这项工作。 GetNamedSecurityInfo检索对象的自主访问控制列表(DACL)(在您的情况下为目录)。 SetEntriesInAcl通过将新条目(包括权限)与现有条目合并来创建新的访问控制列表(ACL)。 SetNamedSecurityInfo将修改后的DACL分配回对象。

关于修改权限是以下权限的组合:FILE_GENERIC_READ | FILE_GENERIC_WRITE | FILE_GENERIC_EXECUTE |删除你可以像这样调用这个函数:

std::string strFullPath("C:\test");

DWORD dwRes = AddAceToObjectsSecurityDescriptor(
    const_cast<LPTSTR>(strFullPath.c_str()),
    SE_FILE_OBJECT,
    "StandardUser",
    TRUSTEE_IS_NAME,
    FILE_GENERIC_READ | FILE_GENERIC_WRITE | FILE_GENERIC_EXECUTE | DELETE,
    GRANT_ACCESS,
    NO_INHERITANCE);

答案 1 :(得分:0)

This question可能对C ++有所帮助。 This one解释说,在Java 7之前,这在Java中是不可能的。有关更详细的答案,请提出一个更具体的问题(到目前为止您尝试了什么,为什么它不起作用)。