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:
系统驱动器)来保存旨在与所有用户共享的文件(最终在内部创建一个带有公司/应用程序名称的目录)。应使用环境变量ProgramData
或AllUsersProfile
访问该位置。
或者,要为每个用户分别保存设置/数据,您可以使用这些环境变量来访问预期的目录:
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 中工作