Политика конфиденциальностиКонтактыО сайтеОтзывыGitHubDonate
© EVILEG 2015-2018
Рекомендует хостинг
TIMEWEB
U
10 февраля 2018 г. 13:49

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

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

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

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

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

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

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

0

Понятно.

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

Вот мне такой код попадался для такой проверки из под 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; }
0

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

0
U

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

0

Комментарии

Только авторизованные пользователи могут публиковать комментарии.
Пожалуйста, авторизуйтесь или зарегистрируйтесь
IO
20 января 2019 г. 18:39
Ivan Otreshko

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

  • Результат:0баллов,
  • Очки рейтинга-10
IO
20 января 2019 г. 15:27
Ivan Otreshko

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

  • Результат:0баллов,
  • Очки рейтинга-10
v
17 января 2019 г. 11:51
vitalir12

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

  • Результат:20баллов,
  • Очки рейтинга-10
Последние комментарии
I
16 января 2019 г. 8:06
IscanderChe

Заработало. Забыл model->select(); вписать.
I
16 января 2019 г. 8:02
IscanderChe

Всё равно пусто, хотя строка с данными в базу добавляется.
16 января 2019 г. 7:51
Евгений Легоцкой

потому, что нужно сохранять информацию для всех остальных ролей и столбцов через вызов переопределённого метода. Да к тому же вы ещё и зациклили вызов метода data. QVariant MySqlTableModel:...
I
16 января 2019 г. 7:43
IscanderChe

Сделал вот так. В tableView ничего нет, кроме заголовка. QVariant MySqlTableModel::data(const QModelIndex &index, int role) const{ if (role == Qt::DisplayRole) { QTime ...
Сейчас обсуждают на форуме
21 января 2019 г. 16:28
Михаиллл

Добрый день.Почему работая на С++, нельзя полноценно использовать dll , написанных на C#, java?И почему используя другие языки, можно использовать dll , написанных на C++?
21 января 2019 г. 16:24
Михаиллл

Нашел ссылку на древние типы данных , а тут нынешние их аналоги.Но все равно каое что непоня:что такое : LPCTSTR, CALLBACK (наверно QDialig),IDOK, EDITSTREAM, TCHARКод...
21 января 2019 г. 14:30
Евгений Легоцкой

Порядок создания тем - пункт 4
ПБ
21 января 2019 г. 9:23
Павел Богдевич

Ребята, привет. Это 2 версии одного приложения. Отличаются только способом инициализации таблицы. В одной версии работает сортировка таблицы, когда кликаешь по хедеру колонки, в другой - нет. ...
21 января 2019 г. 7:36
Евгений Легоцкой

Добрый день! Из ваего вопроса понятна первая часть. На сайте есть статья по динамическому созданию виджетов, посмотрите её для начала - Динамическое создание виджетов . ...
Присоединяйтесь к нам в социальных сетях

Для зарегистрированных пользователей на сайте присутствует минимальное количество рекламы