Windows AutoStart 有时(随机?)不工作
Windows AutoStart sometimes (randomly?) not working
所以我给自己写了一个我一直想要的方便的应用程序 运行。
它是用 C++ 和 QT 编写的。
自动启动是通过注册表完成的
如果用户单击自动运行 复选框,将执行此代码
QSettings RegSettings("HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Run",
QSettings::NativeFormat);
if (ui.cb_autorun->isChecked())
{
RegSettings.setValue("FanControlV2", "\"" + QDir::currentPath().remove("/platforms").replace("/", "\") + "\FanControllerV2.exe\"");
}
else {
RegSettings.remove("FanControlV2");
}
这很好用,至少大部分时间是这样
但有时应用程序无法启动,我必须 运行 手动
我真的不知道我做错了什么,因为许多其他应用程序每次都可以正常启动...
有什么建议吗?
编辑:问题发生在 win7、8.1 和 10
使用 currentPath
确定应用程序可执行文件的位置总是错误。你永远不应该那样做。在大多数操作系统上,您无法控制应用程序的工作目录。它实际上可以是任何东西。此外,在 OS X 之外,用户可以自由地,很可能,不,鼓励他们根据自己的喜好为您的应用程序设置工作文件夹,以便文件访问对话框将指向一个有用的默认位置。
当设置存储在注册表中时,当您的进程的工作目录恰好与其安装文件夹相同时,它很可能会成功。但这种状态只是一个愉快的巧合,正如你自己通过实验确定的那样。
您应该使用 QCoreApplication::applicationFilePath()
来获得正确的路径。您还应该使用 QDir::toNativeSeparators
而不是手动替换。
您的代码应如下所示:
RegSettings.setValue("FanControlV2", QDir::toNativeSeparators(
QCoreApplication::applicationFilePath()));
所以我给自己写了一个我一直想要的方便的应用程序 运行。 它是用 C++ 和 QT 编写的。
自动启动是通过注册表完成的 如果用户单击自动运行 复选框,将执行此代码
QSettings RegSettings("HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Run",
QSettings::NativeFormat);
if (ui.cb_autorun->isChecked())
{
RegSettings.setValue("FanControlV2", "\"" + QDir::currentPath().remove("/platforms").replace("/", "\") + "\FanControllerV2.exe\"");
}
else {
RegSettings.remove("FanControlV2");
}
这很好用,至少大部分时间是这样 但有时应用程序无法启动,我必须 运行 手动
我真的不知道我做错了什么,因为许多其他应用程序每次都可以正常启动...
有什么建议吗?
编辑:问题发生在 win7、8.1 和 10
使用 currentPath
确定应用程序可执行文件的位置总是错误。你永远不应该那样做。在大多数操作系统上,您无法控制应用程序的工作目录。它实际上可以是任何东西。此外,在 OS X 之外,用户可以自由地,很可能,不,鼓励他们根据自己的喜好为您的应用程序设置工作文件夹,以便文件访问对话框将指向一个有用的默认位置。
当设置存储在注册表中时,当您的进程的工作目录恰好与其安装文件夹相同时,它很可能会成功。但这种状态只是一个愉快的巧合,正如你自己通过实验确定的那样。
您应该使用 QCoreApplication::applicationFilePath()
来获得正确的路径。您还应该使用 QDir::toNativeSeparators
而不是手动替换。
您的代码应如下所示:
RegSettings.setValue("FanControlV2", QDir::toNativeSeparators(
QCoreApplication::applicationFilePath()));