我正在维护使用J2SE开发的软件(但我是c#开发人员实际上没有Java的丰富经验)。该软件使用access作为数据存储区,此访问数据库存储在db文件夹中。当用户从“标准用户”而非管理员安装此应用程序时,在Windows 7或Vista中,他无法获得db文件夹的权限。要使软件运行,我们需要为当前用户(标准用户)添加“修改”权限。
实际上我搜索了如何使用Java做到这一点,但没有发现任何东西,但我找到的资源很少,但还不够。问题是“如何在c ++(旧的c ++而不是.net)或使用Java的情况下向当前登录的用户授予”修改“权限?
答案 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中是不可能的。有关更详细的答案,请提出一个更具体的问题(到目前为止您尝试了什么,为什么它不起作用)。