使用普通c++;,还是java

使用普通c++;,还是java,java,c++,windows,Java,C++,Windows,我正在维护一个使用J2SE开发的软件(但我是c#开发人员,实际上没有Java方面的丰富经验)。该软件使用access作为数据存储,该access数据库存储在db文件夹中。当用户在Windows 7或Vista中从“标准用户”而不是管理员安装此应用程序时,他无法获得对db文件夹的权限。要使软件运行,我们需要为当前用户(标准用户)添加“修改”权限 实际上,我搜索了如何使用Java实现这一点,但什么也没找到,但我发现资源很少,但还不够。C++的C++ C++ java语言(旧C++ + Net)或ja

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


实际上,我搜索了如何使用Java实现这一点,但什么也没找到,但我发现资源很少,但还不够。C++的C++ C++ java语言(旧C++ + Net)或java使用了“修改”权限,可以帮助C++。在Java 7之前解释这是不可能的。为了更详细的答案,请问一个更具体的问题(到目前为止,你尝试过什么,为什么它不起作用).

MSDN文章中提供的函数执行此任务。检索对象(在您的情况下为目录)的自主访问控制列表(DACL)。通过将新条目(包括权限)与现有条目合并来创建新的访问控制列表(ACL)。将修改后的DACL分配回对象

关于修改权限,它是以下权限的组合:FILE_GENERIC_READ | FILE_GENERIC_WRITE | FILE_GENERIC_EXECUTE | DELETE您可以像这样调用此函数:

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);
std::string strFullPath(“C:\test”);
DWORD dwRes=添加对象安全描述符(
const_cast(strFullPath.c_str()),
SE_文件_对象,
“标准用户”,
受托人的姓名,
文件(通用)读取|文件(通用)写入|文件(通用)执行|删除,
允许您访问,
无遗传);

您是否尝试过Boost::fileSystem libraries?您是否真的在处理由非管理员安装软件的情况?这可能无法完成,因为如果用户没有修改db文件夹的权限,您可能也无法更改权限。数据库文件夹位于何处?@Harry,否实际上,用户是使用“以管理员身份运行”来安装的,但默认情况下,这不会给他(普通用户)任何db文件夹的权限。在这种情况下,Bojan的回答应该可以做到这一点。