© EVILEG 2015-2018
Рекомендует хостинг
TIMEWEB
10 февраля 2018 г. 13:49

Запуск приложения от имени администратора

Добрый день, написал я инсталлятор с помощью QWizard, возник вопрос как сделать что бы при запуске моего инсталлятора Window 7 запрашивала запуск от имени администратора, если запустить просто то программа отработает не корректно. и Qt 4 к сожалению.

Добрый день!
Ну вообще-то запуск приложения с правами администратора - это операционной системы, а не самого приложения.
Насколько знаю, есть возможность запросить права администратора у инсталляторов, сделанных с помощью Qt installer framework (QtIFW) и я такое реализовывал на прошлой работе. Нужно поднимать старые исходники.

Есть также возможность что-то выполнить с правами администратора с помощью QProcess или некоторого платформозависимого функционала.
Вот здесь , например, есть получение прав суперпользователя для Linux.

Для Windows я не знаю, но полагаю, что есть примерно аналогичные варианты с WinAPI.

А вообще, у вас нет желания всё-таки посмотреть в сторону QtIFW? там достаточно много полезного функционала реализовано.

так я уже написал инсталлятор, просто не все инструкцию читают, где написано запуск приложения от имени администратора.

Понятно.

А знаете, можно попробовать проверять, запущена ли программа от администратора, и если нет, то выкидывать сообщения, что программу нужно запустить с правами администратора.

Вот мне такой код попадался для такой проверки из под WinAPI
BOOL IsAppRunningAsAdminMode()
{
    BOOL fIsRunAsAdmin = FALSE;
    DWORD dwError = ERROR_SUCCESS;
    PSID pAdministratorsGroup = NULL;
 
    // Allocate and initialize a SID of the administrators group.
 
    SID_IDENTIFIER_AUTHORITY NtAuthority = SECURITY_NT_AUTHORITY;
    if (!AllocateAndInitializeSid(
        &NtAuthority, 
        2, 
        SECURITY_BUILTIN_DOMAIN_RID, 
        DOMAIN_ALIAS_RID_ADMINS, 
        0, 0, 0, 0, 0, 0, 
        &pAdministratorsGroup))
    {
        dwError = GetLastError();
        goto Cleanup;
    }
 
    // Determine whether the SID of administrators group is enabled in 
 
    // the primary access token of the process.
 
    if (!CheckTokenMembership(NULL, pAdministratorsGroup, &fIsRunAsAdmin))
    {
        dwError = GetLastError();
        goto Cleanup;
    }
 
Cleanup:
    // Centralized cleanup for all allocated resources.
 
    if (pAdministratorsGroup)
    {
        FreeSid(pAdministratorsGroup);
        pAdministratorsGroup = NULL;
    }
 
    // Throw the error if something failed in the function.
 
    if (ERROR_SUCCESS != dwError)
    {
        throw dwError;
    }
 
    return fIsRunAsAdmin; }

Как бы повышения прав и привилегий программы - это весьма проблематичное занятие. И инсталляторы получают так сказать такие права за счёт того, что запускают сторонние процессы с запросом прав администратора, а сами при этом свои права не повышают, поскольку для этого нужно заново запускать инсталлятор сразу с правами администратора.

спасибо, ничего не понятно конечно, но это наверно потому что я уже весь день программирую, и ничего уже соображаю

Ответы

Только авторизованные пользователи могут отвечать на форуме.
Пожалуйста, Авторизуйтесь или Зарегистрируйтесь
14 августа 2018 г. 11:29
Марк Федяшов

C++ - Тест 004. Указатели, Массивы и Циклы

  • Результат 70баллов,
  • Очки рейтинга1
14 августа 2018 г. 11:05
Марк Федяшов

C++ - Тест 004. Указатели, Массивы и Циклы

  • Результат 50баллов,
  • Очки рейтинга-4
14 августа 2018 г. 11:00
Марк Федяшов

C++ - Тест 003. Условия и циклы

  • Результат 42баллов,
  • Очки рейтинга-8
Последние комментарии
10 августа 2018 г. 13:40
Alex

Работа с триггерными функциями в PostgreSQL

Приветствую! Если вы создаете новую таблицу, почему бы просто не сделать вьюху ? Просто от одного названия "триггер" как-то не хочется его использовать, а уж кода сколько писа...
10 августа 2018 г. 11:46
Евгений Легоцкой

Bash скрипт для создания и скачивания дампа базы данных и медиа файлов с удаленного сервера

Вон оно что. Не сталкивался с таким, надо будет глянуть исходники дефолтного менеджера объектов. Возможно там кеширование просто. Пробовали добавить запись через adminer, перезапусти...
10 августа 2018 г. 11:34
Alex

Bash скрипт для создания и скачивания дампа базы данных и медиа файлов с удаленного сервера

допустим у нас есть любая таблица, созданная джангой. через админку добавляем пару записей. все ок. далее, лично в моем случае , я открываю adminer, и в эту таблицу добавляю еще одну зап...
Сейчас обсуждают на форуме
14 августа 2018 г. 7:02
Ruslan-maniak

Переключение страниц и перевод фокуса на потомка новой страницы

Большое спасибо. Подтолкнули меня на мысль вынести обработку клавиш из PathView на всю страницу. И тогда - да, ваша подсказка работает. добавил в StackView onCurrentItemChanged: currentItem.fo...
14 августа 2018 г. 6:39
Евгений Легоцкой

Как сделать аудиовизуализацию для плеера на qt?

Добрый день. Просмотрите пример в Qt Creator, который на QML, там реализовано визуализация, возможно вам понравится использовать, QML, да и кастомные интерфейсы на нём всё-таки лучше...
11 августа 2018 г. 10:12
Евгений Легоцкой

Qt C++ vs QML

Добрый день. Если Андроид предполагается, то конечно нужно использовать QML. Я занимался разработкой арканоида на QML и ещё одной игры. Пытался реализовывать логику на QML, но это ...
11 августа 2018 г. 9:24
Евгений Легоцкой

Помогите со слоями

Проверочное сообщение
9 августа 2018 г. 13:27
Иринка Садыкова

как выделять текст мышкой в qml ?

я ведь использую те же средства. единственное отличие -  ввожу текст с клавиатуры в TextArea

Рекомендуемые страницы