Мне интересно, если можно решить эту проблему. Ive получил приложение qt, и если пользователь установил флажок, я хочу, чтобы это приложение запускалось при запуске операционной системы. Ive уже гугле, и ив придумать с этим решением>Запуск приложения при запуске
мое приложение QT нужно привилегии администратора для того, чтобы изменить реестр, так
- создать файл манифеста (
<requestedExecutionLevel level="requireAdministrator" uiAccess="false"/>
)
2. применить эту команду
мт -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");
}
}
Итак, это выглядит хорошо? BUT ... приложение с привилегиями администратора admin не может быть запущено при запуске операционной системы, но приложение без административных привилегий не может изменить реестр. Итак, есть одно решение - сказать пользователю, что если он хочет установить этот параметр «запуска», ему сначала нужно запустить приложение как admin, тогда приложение сможет изменить реестр, а привилегии по умолчанию останутся «asInvoker», , но это кажется действительно непрактичным, и я думаю, что пользователям это будет обескураживать.
Итак, как решить эту проблему? как другие приложения решают эту проблему?
Лучшим решением было бы запросить права суперпользователя не при запуске приложения, но на установке опции «запуск при загрузке». Не могли бы вы просто создать подсказку рядом с кнопкой «запуск при загрузке», заявив, что для этого действия требуются права root и, следовательно, UAC появится? Тогда пользователь не удивился бы. Althoug решение без UAC говорит, что все будет лучше, конечно. – Redfox
ну, я не знаю, как получить привилегии root только после нажатия на этот флажок. Кстати, мое текущее «решение» вызывает окно предупреждения UAC, и я не считаю его чем-то негативным. Как временное решение, я просто, вероятно, останусь в привилегированных привилегиях «asInvoker» и напишу под этим флажком что-то вроде «для этого действия требуются административные привилегии, вы должны запустить applicationatino с опцией« run as administrator »» –
Но все же, им интересно, как другие приложение решает эту проблему.Например, я просматривал реестр, и я обнаружил, что Hamachi был там, и он действительно начинается при запуске системы, но приложение не требует административных привилегий, так как это было сделано в записи реестра? (возможно, во время установки, я думаю .., но все равно, как пользователь отменит его через приложение, если у этого приложения нет админ-привилегий) –