10 февраля 2018 г. 13:49

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

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

  • #
  • 11 февраля 2018 г. 14:19
Добрый день!
Ну вообще-то запуск приложения с правами администратора - это операционной системы, а не самого приложения.
Насколько знаю, есть возможность запросить права администратора у инсталляторов, сделанных с помощью 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; }
  • EVILEG
  • #
  • отредактировано 11 февраля 2018 г. 14:37
  • 11 февраля 2018 г. 14:33

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

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

Ответы

Только авторизованные пользователи могут отвечать на форуме.
Пожалуйста, Авторизуйтесь или Зарегистрируйтесь
22 февраля 2018 г. 18:58
Oleg_kgd

C++ - Тест 001. Первая программа и типы данных

  • Результат 66 баллов
  • Очки рейтинга -1
21 февраля 2018 г. 19:18
sentinel

Qt - Тест 001. Сигналы и слоты

  • Результат 78 баллов
  • Очки рейтинга 2
21 февраля 2018 г. 11:32
barilla

C++ - Тест 006. Перечисления

  • Результат 0 баллов
  • Очки рейтинга -10
Последние комментарии
22 февраля 2018 г. 16:42
soz7557

Qt/C++ - Урок 029. Изображение в базе данных в Qt – Сохранение и Восстановление

Hi, could you please show how to delete file from image Blob?  also if the same image exist in Blob then don't over write..

21 февраля 2018 г. 8:37
EVILEG

Qt/C++ - Урок 027. Полиморфизм в Qt на примере геометрических фигур в QGraphicsScene

Добрый день! 1) Эллипс можно реализовать так void Ellipse::paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget){ painter->setPen(QPen(...

20 февраля 2018 г. 22:10
Log159

Qt/C++ - Урок 027. Полиморфизм в Qt на примере геометрических фигур в QGraphicsScene

Здравствуйте! В программировании новичок и есть пара вопросов. Буду очень благодарен за ответ. Не совсем понимаю как: 1) реализовать подобным образом рисование эллипса(конкре...

18 февраля 2018 г. 14:42
EVILEG

QML - Урок 019. Navigation Drawer в Qt Qml Android

Да, теперь представляю, как то работает. Согласен, ваша правка определённо к месту здесь.

Сейчас обсуждают на форуме
21 февраля 2018 г. 22:19
vitaliy_antipov

Проблема с ComboBox

Спасибо за ответы, есть над чем подумать

21 февраля 2018 г. 13:26
sol11

Qtableviev после сортировки

Спасибо, всё заработало :) Единственное вот тут row на id поменял и всё круто :)) if(id == -1){ model->insertRow(model->rowCount(QModelIndex())); map...

20 февраля 2018 г. 13:18
alex_lip

Разбить один qml файл на несколько составляющих

Да спасибо. Просто после необходимости специфичных названий для файла - стараюсь обращать внимание на любую мелочь.

20 февраля 2018 г. 8:13
EVILEG

Передача файлов в django минуя временные папки django и nginx

Тогда я даже и не знаю, прошерстил документацию, но там нет информармации о возможности отключения сохранения временных файлов. Как я понял временные файлы используются, когда тело запро...

18 февраля 2018 г. 12:34
EVILEG

QGraphicsView

Добрый день!QGraphicsView - это виджет, а значит, что в качестве парента для него выступает QWidget, а не QObject.То есть из ошибок, которые сразу бросаются в глаза в этом коде, здесь прису...