Мне интересно, если это возможно, чтобы решить эту проблему.У меня есть приложение qt, и если пользователь поставит галочку, я хочу, чтобы это приложение запускалось при запуске операционной системы.Я уже гуглил и нашел решение>
моему приложению QT нужны привилегии администратора для изменения реестра, поэтому
- создайте файл манифеста (
<requestedExecutionLevel level="requireAdministrator" uiAccess="false"/>
)
2.применить эту команду
mt -manifest manifestfile -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»., но это кажется действительно непрактичным, и я думаю, что пользователи будут разочарованы этим.
Итак, как решить эту проблему?как другие приложения решают эту проблему?