QSettings没有管理员权限就不保存ini更改

时间:2018-04-09 16:19:07

标签: c++ qt qt5 ini qsettings

问题

我目前正在通过在Windows上编写mp3播放器来学习Qt。现在我想使用QSettings来保存对应用程序所做的更改。我已经尝试将更改保存到注册表(工作正常)但我想将它们存储在ini文件中(出于可移植性的原因)。

但由于某种原因,我无法创建或编写现有的ini文件(阅读效果很好)。

到目前为止我尝试了什么

  • 使用管理员权限运行应用程序,该权限有效,但始终不可行
  • 使用QStandardPath确保可写路径

MCVE

#include <QCoreApplication>
#include <QSettings>
#include <QDebug>
#include <QFileInfo>
#include <QStandardPaths>

int main(int argc, char *argv[])
{
    QCoreApplication app(argc, argv);

    QString path = QStandardPaths::writableLocation(QStandardPaths::DesktopLocation);
    path = path + "/settings.ini";

    QFileInfo info(path);
    qDebug() << info.exists();
    qDebug() << info.isWritable();

    QSettings settings(path, QSettings::IniFormat);
    settings.setValue("key", "value");
    settings.sync();

    return 0;
}

问题

为什么只有在应用程序以管理员权限运行时才生成/更新ini文件?有没有办法没有?

1 个答案:

答案 0 :(得分:0)

目前尚不清楚使用哪种版本的操作系统。 Windows 10(版本1709)附带名为“受保护的文件夹”的新功能,以防止例如勒索软件威胁。你可以在某处重新配置它。它禁止对桌面/文档等进行写访问。

但更优选的方法是将ini文件存储到其他位置,例如应用程序数据。