Qt应用程序。Mac/XP/Vista/Windows 7上的部署:是否有用于放置许可证文件的公共访问目录?
我必须在以下环境中部署Qt应用程序:Qt应用程序。Mac/XP/Vista/Windows 7上的部署:是否有用于放置许可证文件的公共访问目录?,qt,deployment,windows-7,path,windows-xp,Qt,Deployment,Windows 7,Path,Windows Xp,我必须在以下环境中部署Qt应用程序: Mac OS/X(>=基于Intel的Tiger 10.4,最高可达Snow Leopard 10.6.+) 视窗XP Windows Vista 视窗7 我需要一个公共访问目录来放置许可证文件,并且我需要机器的每个用户都具有对它的读/写访问权限,而不仅仅是管理员 我检查了许多Qt函数,如下所示: QString QDir::homePath() QDir QDir::home () QString QDir::rootPath () QString Q
- Mac OS/X(>=基于Intel的Tiger 10.4,最高可达Snow Leopard 10.6.+)
- 视窗XP
- Windows Vista
- 视窗7
QString QDir::homePath()
QDir QDir::home ()
QString QDir::rootPath ()
QString QDir::tempPath ()
…但它们似乎都返回特定于用户的或过于通用的路径
是否有任何特定于Qt的函数来获取公共“应用程序路径”
考虑到操作系统的版本,我开始考虑创建自己的函数,
但即使在这种情况下,我也感到有点失落。
你知道有什么好的来源可以为我上面提到的操作系统找到合适的路径吗 我也是Qt中的n00b,因此我不确定这是否是最佳选项,但使用从设置/配置文件获取许可证文件的路径如何。安装程序应创建具有正确值的文件。安装程序可以使用一些特定于操作系统的默认值,甚至可以在安装时询问用户,因此应用程序独立于操作系统
QSettings
具有持久性,因此您不必为读取、写入文件而烦恼。请查看
QDesktopServices::DataLocation enum似乎很合适。对于Windows 2000及更高版本,此文件夹称为。这是对我自己问题的回答, 但我会等着看是否有更好的解决办法。 (也许我错过了一个Qt功能) 我使用QSettings类进行了以下攻击 (@thequark:+1表示灵感): 如您所见,我并没有真正使用QSettings对象,但是 我只是获取它的文件路径,看看Qt将在哪里存储它 重要的是要使用:
- QSettings::IniFormat:因为我们 对某个文件感兴趣-不是例如a Windows注册表位置
- QSettings::SystemScope:因为我们需要特定于机器的 用户特定的路径
编辑-PS:在Mac OS-X中,非管理员用户无法写入目录“/Library/Preferences”。我终于使用了目录“/Users/Shared”。为什么用户需要能够写入许可协议?@Cody Gray:问得好。因为我希望用户(即使是非管理员)能够输入许可证号并激活许可证(我知道这是一种奇怪的方法)。另一个原因是我可能会决定在这个基本目录中存储一些隐藏的文件/目录,以备试用。@Cody Gray:对不起,我刚才意识到了这个误解。我真的不想存储许可协议文件,但许可注册文件(包含客户电子邮件、许可序列号、激活码等)已用于存储用户特定的数据。它返回一个特定于用户的路径(在Windows 7上):c:\Users\\AppData\Local\而我实际上需要一个非特定于用户的路径。谢谢你的回答(在Qt中工作一年后,我感觉自己也像个新手)。事实上,我在1小时前发现了QSettings,而我已经创建了自己的格式来保存应用程序设置。关于我最初的问题:我想对应用程序本身拥有完全的控制权,因此我不想在应用程序之间分割逻辑。和安装程序(Mac OS/X中的安装程序可以是简单的拖放)。此外,问题仍然存在:安装程序将如何发现这个特定于O/S的“通用应用程序”路径,以及每个O/S上的候选位置是什么?嗯,这些看起来像是在Windows上使用的正确路径。唯一需要注意的是将路径分隔符硬编码到代码中。我相信Windows shell在大多数地方都接受正斜杠,但反斜杠是官方的路径分隔符,即使在所有平台上也不能保证它是恒定的。我想Qt提供了某种类型的
路径分隔符
属性,您可以使用它来代替它?@Cody Gray:不,即使在windows应用程序上使用它,Qt上的“/”也没有问题。实际上,官方文档指示您在任何地方使用“/”,Qt-QFile&QDir类将在内部将其转换为目标操作系统的适当分隔符。唯一的例外是,当您希望进行本机Windows API调用时,可以使用QDir::toNativeSeparators()函数。
---------------------------------------------
QString orgName = "fooOrg";
QString appName = "fooApp";
QSettings qsettings(QSettings::IniFormat, QSettings::SystemScope, orgName, appName);
QString iniFilepath = qsettings.fileName();
QString commAppPath = iniFilepath.left(iniFilepath.length() -
QString("/fooOrg/fooApp.ini").length());
---------------------------------------------