Qt。所有功能都在发布文件夹中工作,但不在 Program Files 中

Posted

技术标签:

【中文标题】Qt。所有功能都在发布文件夹中工作,但不在 Program Files 中【英文标题】:Qt. All functions work in release folder, but not in Program Files 【发布时间】:2015-12-20 21:15:39 【问题描述】:

在我的程序中,我具有重新启动程序和从 .ini 文件加载/保存设置的功能。一切都在发布文件夹中工作,但是当我安装它时(程序在 C://Program Files (x86) 中):

*当我调用重启函数时

QProcess::startDetached(QApplication::applicationFilePath());
exit(0);

应用程序正在自行终止,但没有启动新实例...

*或当我将保存设置调用到 .ini 文件时

QSettings setting(qApp->applicationDirPath() + "//config//settings.ini", QSettings::IniFormat);
setting.sync();
setting.beginGroup("/Example");
setting.setValue("/Example1", 
setting.endGroup();

当我第一次运行应用程序时,通常它会保存一次,但下次不保存设置,我尝试保存的 settings.ini 或任何其他 .ini 文件看起来像“锁定”,我不能即使通过记事本保存它...但是如果我以管理员权限运行应用程序一切正常(重新启动仍然没有)

//编辑:我已经在桌面上检查过这个,它可以工作。在另一个分区 (D://) 上它不起作用。

此时其他功能正常工作。有人可以帮我解决这个问题吗?

【问题讨论】:

如果启用了 UAC,您将无法将数据保存到 Windows 中的程序文​​件夹。这是设计使然,不是错误。 【参考方案1】:

我认为您需要管理员权限才能在最新的 Windows 中为 Program Files 创建文件。尝试在其他地方安装它并检查它是否仍然失败

【讨论】:

安装时正在创建文件。我已经尝试将它安装在桌面、D、E 分区上。有用。我可以让它在 ProgramFiles 中工作吗? 不,没有管理员权限是不可能将文件保存到 programFiles 的,如果您禁用 Windows 的 UAC,当然不建议这样做 好的,重启怎么样? 请再次阅读我的问题...我也有重启功能的问题。 即使重新启动,您也必须始终以管理员身份运行应用程序才能从 programfiles 文件夹工作。没有设置“以管理方式运行”命令的永久方法【参考方案2】:

默认情况下,您需要管理员权限才能在 Program Files 中写入。

您的应用程序应该使用路径C:\ProgramData(假设C: 系统驱动器)来保存旨在与所有用户共享的文件(最终在内部创建一个带有公司/应用程序名称的目录)。应使用环境变量ProgramDataAllUsersProfile 访问该位置。

或者,要为每个用户分别保存设置/数据,您可以使用这些环境变量来访问预期的目录:

AppData(扩展为例如C:\Users\<Username>\AppData\Roaming)- 用户个人资料特定数据

LocalAppData(扩展为例如C:\Users\<Username>\AppData\Local)- 机器特定数据

getenv函数可用于读取环境变量。

【讨论】:

好的,重启怎么样? 您能否检查startDetached 是否返回true(表示成功)?还有applicationFilePath的回归。 我试过 if (QProcess::startDetached(QApplication::applicationFilePath())); QMessageBox::information(this, "Test", "True");在 ProgramFiles 中它返回“True”,但我不确定我是否以正确的方式做到了。 applicationFilePath 返回正确的路径。 另请参阅doc.qt.io/qt-5/qstandardpaths.html,以独立于平台的方式查找位置。

以上是关于Qt。所有功能都在发布文件夹中工作,但不在 Program Files 中的主要内容,如果未能解决你的问题,请参考以下文章

Android Geolocation在模拟器中工作但不在手机中工作

Erlang:函数在 shell 中工作,但不在 YAWS 中

Python plotly 在命令行中工作,但不在 python 文件中 - 导入错误

Webview 在 Windows 上的 mingw 中无法在 Qt Creator 中工作

python在调试模式下在c ++中工作,但不在exe文件中

NSKeyedArchiver 在模拟器中工作,但不在设备中,iOS SDK