我想知道是否有可能解决此问题。 我得到了qt应用程序,如果用户勾选复选框,我希望此应用程序在启动操作系统时启动。 香港专业教育学院已经一派,和香港专业教育学院想出了这个解决方案>在启动时运行应用程序
我的QT应用程序需要以修改注册表的管理员权限,所以
- 创建清单文件(
<requestedExecutionLevel level="requireAdministrator" uiAccess="false"/>
)
2。应用此命令
公吨-manifest manifest资源配置文件-outputresource:binfile.exe; 1
3.使用这段代码在QT修改注册表
void MainWindow::set_on_startup() {
QSettings settings("HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Run", QSettings::NativeFormat);
if (ui->checkBox->checkState()) {
QString value = QCoreApplication::applicationFilePath(); //get absolute path of running exe
QString apostroph = "\"";
#ifdef DEBUG
ui->textEdit->append(QCoreApplication::applicationFilePath());
#endif
value.replace("/","\\");
value = apostroph + value + apostroph + " --argument";
#ifdef DEBUG
ui->textEdit->append(value);
#endif
//write value to the register
settings.setValue("name", value);
}
else {
settings.remove("name");
}
}
所以,这看起来不错吧? 但是...应用程序默认管理员不能在启动操作系统时启动,但是没有管理员权限的应用程序不能修改注册表。所以,有一个解决方案 - 告诉用户,如果他想设置这个“启动”选项,他首先需要以管理员身份启动应用程序,然后应用程序将能够修改注册表,并且默认权限将保持“asInvoker” ,但这看起来确实不切实际,我认为用户会因此感到灰心。
那么,如何解决这个问题呢?其他应用程序如何解决此问题?
更好的解决方案是要求不能在应用程序的启动,但在设置“开始启动”选项root用户权限。你可不只是在按钮“开机启动”旁边创建一个提示,说这个动作需要root权限,因此UAC弹出?那么用户不会感到惊讶。当然,没有UAC的解决方案说任何事情都会更好。 – Redfox 2012-03-02 13:57:21
好吧,我不知道如何获得root权限后,只需点击该复选框。顺便说一句,我目前的“解决方案”导致UAC警报窗口,我不认为它是负面的东西。作为临时的解决方案,我可能会离开默认priveleges“asInvoker”,并在该复选框下写下类似于“此操作需要管理员授权,您必须启动applicatino与”以管理员身份运行“选项” – 2012-03-02 14:16:57
但仍然,即时通讯想知道其他应用正在解决这个问题。例如,我一直在浏览注册表,我发现Hamachi在那里,它确实从系统启动开始,但应用程序不需要管理员权限,那么这个注册表项是如何创建的? (可能在安装过程中,我猜...但仍然,如果该应用程序没有管理员权限,用户将如何通过应用程序取消它) – 2012-03-02 14:20:23