此问题适用于Windows Vista!
我有一个通常无需管理权限的应用程序.有一个活动确实需要管理权限但我不想以更高的权限启动应用程序本身,因为我知道大部分时间用户甚至不使用该功能.
我正在考虑某种方法,通过该方法,我可以在某些事件上提升应用程序的权限(例如按下按钮).例:

如果用户单击此按钮,则会提示他使用UAC对话框或同意.我怎样才能做到这一点?
我想知道它是否有可能解决这个问题.我有qt应用程序,如果用户勾选复选框,我希望此应用程序在启动操作系统时启动.我已经google了,我想出了这个解决方案>
我的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");
}
}
Run Code Online (Sandbox Code Playgroud)
那么,这看起来不错吧?但是......默认管理员priveleges的应用程序无法在启动操作系统时启动,但是没有管理员priveleges的应用程序无法修改注册表.所以,有一个解决方案 - 告诉用户,如果他想设置这个"启动"选项,他首先需要以管理员身份启动应用程序,然后应用程序将能够修改注册表,默认权限将保持"asInvoker" ,但这似乎真的不切实际,我认为用户会因此而气馁.
那么,如何解决这个问题呢?其他应用如何解决这个问题?