Russian Qt Forum

Qt => Вопросы новичков => Тема начата: arty_57 от Февраль 07, 2012, 19:26



Название: QProcess и возможность запуска приложения только из него
Отправлено: arty_57 от Февраль 07, 2012, 19:26
Подскажите пожалуйста как реализовать возможность запуска приложения (написанного мною на Qt) ТОЛЬКО из другого приложения (опять же написанного мною на Qt). То есть чтобы при попытке запуска напрямую приложения 2, появлялось сообщение "Запустите сначала приложение 1", и приложение 2 не запускалось.
Я так понимаю смотреть надо в сторону QProcess. Просто запускать приложение через него уже научился.
Заранее спасибо!


Название: Re: QProcess и возможность запуска приложения только из него
Отправлено: mutineer от Февраль 07, 2012, 20:37
Ну можешь попробовать передавать второму приложению некий секретный параметр комстроки


Название: Re: QProcess и возможность запуска приложения только из него
Отправлено: Aluman от Февраль 07, 2012, 20:41
Если необходимо кроссплатформенное решение, для этого можно использовать QSharedMemory (http://doc.qt.nokia.com/4.8-snapshot/qsharedmemory.html). Т.е. в первом приложении, при запуске, создавать участок общей памяти с определенным содержимым, а во втором приложении проверять существование этого участка и его содержимое.


Название: Re: QProcess и возможность запуска приложения только из него
Отправлено: andrew.k от Февраль 07, 2012, 23:25
Ну можешь попробовать передавать второму приложению некий секретный параметр комстроки
Я тоже так делал, т.к. в моей ситуации это катило.
Но если программа запускается не в изолированном окружении, "секретный" параметр легко посмотреть.
Если нужно исключить случайный запуск, то это решение покатит, а если умышленный, то нет.
Вторая программа должна при старте обращаться к первой за разрешением на запуск и, не получив его, завершаться.
Можно использовать, например, сокет либо QSharedMemory как советовал Aluman.


Название: Re: QProcess и возможность запуска приложения только из него
Отправлено: mutineer от Февраль 08, 2012, 00:12
Ну да, все ж от задачи и степени защиты зависит


Название: Re: QProcess и возможность запуска приложения только из него
Отправлено: GreatSnake от Февраль 08, 2012, 11:01
Самый простой вариант - это проверять наличие определенной переменной среды в запускаемом процессе, которая выставляется в запускальщике.


Название: Re: QProcess и возможность запуска приложения только из него
Отправлено: andrew.k от Февраль 08, 2012, 11:51
Самый простой вариант - это проверять наличие определенной переменной среды в запускаемом процессе, которая выставляется в запускальщике.
Ну так это ж то же самое, что и с секретным параметром.
Узнать легко.


Название: Re: QProcess и возможность запуска приложения только из него
Отправлено: Пантер от Февраль 08, 2012, 11:52
Самый простой вариант - это проверять наличие определенной переменной среды в запускаемом процессе, которая выставляется в запускальщике.
Ну так это ж то же самое, что и с секретным параметром.
Узнать легко.
Все таки это сложнее, чем с параметром запуска.


Название: Re: QProcess и возможность запуска приложения только из него
Отправлено: andrew.k от Февраль 08, 2012, 13:48
Самый простой вариант - это проверять наличие определенной переменной среды в запускаемом процессе, которая выставляется в запускальщике.
Ну так это ж то же самое, что и с секретным параметром.
Узнать легко.
Все таки это сложнее, чем с параметром запуска.
А! Флудер!  ;D
"Новая Лада Калина. На 15% лучше... чем ничего."
На сколько процентов сложнее? )


Название: Re: QProcess и возможность запуска приложения только из него
Отправлено: Пантер от Февраль 08, 2012, 13:50
andrew.k, параметры запуска можно посмотреть в диспетчере задач, а для просмотра переменных сред процесса, нужно отдельное ПО.


Название: Re: QProcess и возможность запуска приложения только из него
Отправлено: andrew.k от Февраль 08, 2012, 13:56
andrew.k, параметры запуска можно посмотреть в диспетчере задач, а для просмотра переменных сред процесса, нужно отдельное ПО.
Диспетчер задач стандартный не показывает параметры запуска. По крайней мере в ХР.

есть setenv. Он устанавливает переменную окружения. для всех (?)
А как задавать переменную среды для конкретного процесса? И как ее считать из другого, если она определена только в первом?


Название: Re: QProcess и возможность запуска приложения только из него
Отправлено: mutineer от Февраль 08, 2012, 14:01
А как задавать переменную среды для конкретного процесса? И как ее считать из другого, если она определена только в первом?

Если говорить про линкусы, то переменная окружения ставится для текущей консольной сессии. Процесс, запускаемый через QProcess, запускается в той же сессии и эту переменную тоже видит. Другие приложения (запущенный из других консолей) эту переменную не увидят


Название: Re: QProcess и возможность запуска приложения только из него
Отправлено: andrew.k от Февраль 08, 2012, 14:06
А как задавать переменную среды для конкретного процесса? И как ее считать из другого, если она определена только в первом?

Если говорить про линкусы, то переменная окружения ставится для текущей консольной сессии. Процесс, запускаемый через QProcess, запускается в той же сессии и эту переменную тоже видит. Другие приложения (запущенный из других консолей) эту переменную не увидят
Ну так значит в той же консоли, я могу ее легко посмотреть.
При необходимости установить и запустить упрямое приложение.


Название: Re: QProcess и возможность запуска приложения только из него
Отправлено: mutineer от Февраль 08, 2012, 14:09
А как задавать переменную среды для конкретного процесса? И как ее считать из другого, если она определена только в первом?

Если говорить про линкусы, то переменная окружения ставится для текущей консольной сессии. Процесс, запускаемый через QProcess, запускается в той же сессии и эту переменную тоже видит. Другие приложения (запущенный из других консолей) эту переменную не увидят
Ну так значит в той же консоли, я могу ее легко посмотреть.
При необходимости установить и запустить упрямое приложение.

Это если приложение было запущено из консоли явно)) Если же оно запущено кликом по значку или ярлыку или пункту меню, то попасть в консоль приложения уже нельзя


Название: Re: QProcess и возможность запуска приложения только из него
Отправлено: mutineer от Февраль 08, 2012, 14:10
Этот спор может быть бесконечным, имхо лучше дождаться пока ТС решит какая степень защиты ему нужна


Название: Re: QProcess и возможность запуска приложения только из него
Отправлено: andrew.k от Февраль 08, 2012, 14:13
Этот спор может быть бесконечным, имхо лучше дождаться пока ТС решит какая степень защиты ему нужна
Да я не спорю ни капли. Я хочу понять, самому пригодится.
Просто не люблю посты вида "Понятно". Поэтому не стал отвечать. Молчание - знак согласия (если это не тред созданый Вересом, там иные законы :)


Название: Re: QProcess и возможность запуска приложения только из него
Отправлено: Пантер от Февраль 08, 2012, 14:21
А как задавать переменную среды для конкретного процесса? И как ее считать из другого, если она определена только в первом?
http://doc.qt.nokia.com/5.0-snapshot/qprocess.html#setProcessEnvironment


Название: Re: QProcess и возможность запуска приложения только из него
Отправлено: GreatSnake от Февраль 08, 2012, 14:24
По умолчанию все потомки наследуют окружение родителя.


Название: Re: QProcess и возможность запуска приложения только из него
Отправлено: mutineer от Февраль 08, 2012, 14:25
О, точно, Пантер мне напомнил))
Еще можно в QProcess передавать команду вида "VARIABLE=VALUE command" и тогда переменная среды будет только у вызываемого процесса


Название: Re: QProcess и возможность запуска приложения только из него
Отправлено: Пантер от Февраль 08, 2012, 14:28
Посмотреть переменные окружения в Линухе очень просто, а вот в винде нужно пользоваться отдельными софтинами.


Название: Re: QProcess и возможность запуска приложения только из него
Отправлено: mutineer от Февраль 08, 2012, 14:33
Посмотреть переменные окружения в Линухе очень просто, а вот в винде нужно пользоваться отдельными софтинами.

Можешь подсказать как посмотреть переменные окружения конкретного процесса?


Название: Re: QProcess и возможность запуска приложения только из него
Отправлено: GreatSnake от Февраль 08, 2012, 14:40
Код
Bash
cat /proc/<process_id>/environ | tr '\0' '\n'


Название: Re: QProcess и возможность запуска приложения только из него
Отправлено: Пантер от Февраль 08, 2012, 15:03
Посмотреть переменные окружения в Линухе очень просто, а вот в винде нужно пользоваться отдельными софтинами.

Можешь подсказать как посмотреть переменные окружения конкретного процесса?
ps e process


Название: Re: QProcess и возможность запуска приложения только из него
Отправлено: GreatSnake от Февраль 08, 2012, 15:09
ps e process
только не мешало бы выставить соответствующий COLUMNS, чтобы все увидеть )


Название: Re: QProcess и возможность запуска приложения только из него
Отправлено: Пантер от Февраль 08, 2012, 15:16
ps e process
только не мешало бы выставить соответствующий COLUMNS, чтобы все увидеть )
Ну, это уже man ps. ;)


Название: Re: QProcess и возможность запуска приложения только из него
Отправлено: mutineer от Февраль 08, 2012, 16:00
Спасибо:)


Название: Re: QProcess и возможность запуска приложения только из него
Отправлено: arty_57 от Февраль 08, 2012, 20:32
Большое спасибо всем откликнувшимся. Прочитав ответы, мне кажется более приемлемым QSharedMemory, тем более что класс стандартный, и надеюсь никаких трудностей с его реализацией не возникнет. Еще раз всем большое спасибо!


Название: Re: QProcess и возможность запуска приложения только из него
Отправлено: sudo от Февраль 09, 2012, 15:46
Есть ещё простой как валенок ход - аргумент командной строки. Если аргумент передан, запускаемся, если нет - сообщение об ошибке


Название: Re: QProcess и возможность запуска приложения только из него
Отправлено: mutineer от Февраль 09, 2012, 15:48
Есть ещё простой как валенок ход - аргумент командной строки. Если аргумент передан, запускаемся, если нет - сообщение об ошибке

Первый коммент прочитай...


Название: Re: QProcess и возможность запуска приложения только из него
Отправлено: andrew.k от Февраль 09, 2012, 15:59
Есть ещё простой как валенок ход - аргумент командной строки. Если аргумент передан, запускаемся, если нет - сообщение об ошибке
Вот откуда такие комментаторы берутся?


Название: Re: QProcess и возможность запуска приложения только из него
Отправлено: sudo от Февраль 09, 2012, 16:04
Есть ещё простой как валенок ход - аргумент командной строки. Если аргумент передан, запускаемся, если нет - сообщение об ошибке

Первый коммент прочитай...

И правда, не заметил

Есть ещё простой как валенок ход - аргумент командной строки. Если аргумент передан, запускаемся, если нет - сообщение об ошибке
Вот откуда такие комментаторы берутся?

Американский форум: задал вопрос - получил ответ.
Израильский форум: задал вопрос - получил вопрос.
Русский форум: задал вопрос и потом долго выслушиваешь какой ты мудак.


Название: Re: QProcess и возможность запуска приложения только из него
Отправлено: mutineer от Февраль 09, 2012, 16:05
Американский форум: задал вопрос - получил ответ.
Израильский форум: задал вопрос - получил вопрос.
Русский форум: задал вопрос и потом долго выслушиваешь какой ты мудак.

Потому что на других форумах вопрошающие читать умеют...


Название: Re: QProcess и возможность запуска приложения только из него
Отправлено: sudo от Февраль 09, 2012, 16:28
Потому что на других форумах вопрошающие читать умеют...

Нет, просто там намного меньше концентрация Д'Артаньянов