我正在维护一个使用J2SE开发的软件,(但是我是c#开发人员,实际上没有Java的丰富经验)。 该软件使用访问作为数据存储,这个访问数据库存储在数据库文件夹。 当用户从“标准用户”而不是pipe理员安装此应用程序时,在Windows 7或Vista中,他无法获得数据库文件夹的权限。 为了使软件运行,我们需要为当前用户(标准用户)添加“修改”权限。
其实我search了如何使用Java,但没有发现什么,但我find了一点资源,但还不够。 问题是“我怎样才能授予'修改'权限到当前logging的用户,在c + +(旧c + +不是.net)或使用Java)?
在MSDN文章“修改C ++中的对象的ACL”中介绍的函数完成这项工作。 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);
这个问题可能会帮助你的C + +。 这个解释说,在Java 7之前,Java是不可能的。对于更详细的答案,请问一个更具体的问题(到目前为止你尝试了什么,为什么它不工作)。