QProcess: сделать процесс независимым и решить проблемы с Windows

Что ж, у меня есть QProcess, который работает как средство обновления моей программы, но в Windows вы НЕ МОЖЕТЕ изменять исполняемые файлы во время их работы, но если вы закроете программу, которая создала процесс обновления, я полагаю, что средство обновления тоже закроется. Можно ли сделать процесс обновления независимым?

Затем в Windows Vista (и более поздних версиях) невозможно запустить мое средство обновления, потому что оно возвращает, что мне нужно повысить свой уровень до администратора. Можно ли повысить разрешения для процесса?


person Blastcore    schedule 06.07.2012    source источник


Ответы (1)


Прежде всего, в отличие от Linux, процессы Windows по умолчанию независимы от своих родителей и не будут закрыты после закрытия родительского процесса.

Правильный способ решить вашу проблему — сделать средство обновления службой Windows. Тогда он не будет запускаться приложением и будет иметь права на запись в системные папки и т. д. (см. здесь)

здесь библиотека для поддержки сервисов в Qt (и это действительно работает).

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

person Lol4t0    schedule 06.07.2012
comment
Можно ли использовать эти библиотеки вместе с QProcess? (Мне нужны межпроцессные связи) - person Blastcore; 07.07.2012
comment
@Blastcore, если вы хотите общаться со службой, вы можете использовать своего рода сокеты или отправить простую команду службе (см. функцию sendCommand). Но вы не сможете взаимодействовать напрямую (через конвейер) с процессом, запущенным с эскалацией привилегий в любом случае. - person Lol4t0; 07.07.2012