我想知道是否有可能解決此問題。 我得到了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