20.11.2017, 14:52 [+3 UTC]
в нашей команде: 2 271 чел. | участники онлайн: 10 (рекорд: 21)

:: РЕГИСТРАЦИЯ

:: консультации

:: задать вопрос

:: все разделы

:: правила

:: новости

:: участники

:: доска почёта

:: форум

:: блоги

:: поиск

:: статистика

:: наш журнал

:: наши встречи

:: наша галерея

:: отзывы о нас

:: поддержка

:: руководство

Версия системы:
7.41 (25.02.2017)

Общие новости:
23.02.2017, 09:51

Форум:
20.11.2017, 14:46

Последний вопрос:
20.11.2017, 14:10

Последний ответ:
20.11.2017, 11:49

Последняя рассылка:
20.11.2017, 06:15

Писем в очереди:
0

Мы в соцсетях:

Наша кнопка:

RFpro.ru - здесь вам помогут!

Отзывы о нас:
31.05.2010, 22:37 »
Болдырев Тимофей
Спасибо большое! [вопрос № 178740, ответ № 261773]
21.02.2011, 18:17 »
Нитрит Алексей
Большущие Вам спасибо!!! [вопрос № 182276, ответ № 265954]

РАЗДЕЛ • С / С++

Создание программ на языках C и C++.

[администратор рассылки: Андрей Кузнецов aka Dr_Andrew (Старший модератор)]

Лучшие эксперты в этом разделе

Коцюрбенко Алексей aka Жерар
Статус: Мастер-Эксперт
Рейтинг: 313
Лысков Игорь Витальевич
Статус: Старший модератор
Рейтинг: 168
CradleA
Статус: Профессионал
Рейтинг: 76

Перейти к консультации №:
 

Консультация онлайн # 191247
Раздел: • С / С++
Автор вопроса: Вадим Исаев ака sir Henry (Старший модератор)
Отправлена: 28.07.2017, 10:46
Поступило ответов: 1

Уважаемые эксперты! Пожалуйста, ответьте на вопрос:
Есть необходимость запускать из своей программы другое приложение от имени другого пользователя. Как это можно сделать? WinAPI как класс отсутствует напрочь... smile

Состояние: Консультация закрыта

Здравствуйте, Вадим Исаев ака sir Henry!
Раз ответов не поступило, придётся ответить. :)
Судя по обсуждению, вы уже поняли, что пошли по неправильному пути.
Только по пути правильному проблем тоже будет немало. Я предложил тот, который сейчас все используют. Я бы реализовал именно так. Но в него надо, что называется, вживаться.
В любом случае внутри одной машины -- это ipc, inter process communication. оно реализовано в модели очень похожей на сетевую. Те же методы. Но -- это не tcp и не udp и вообще не сеть. это отдельный механизм.


Консультировал: Хватов Сергей (Академик)
Дата отправки: 01.08.2017, 19:44

5
Спасибо! Идею я понял, буду экспериментировать.
-----
Дата оценки: 02.08.2017, 09:26

Рейтинг ответа:

0

[подробно]

Сообщение
модераторам

Отправлять сообщения
модераторам могут
только участники портала.
ВОЙТИ НА ПОРТАЛ »
регистрация »

Мини-форум консультации № 191247

Лысков Игорь Витальевич
Старший модератор

ID: 7438

# 1

= общий = | 28.07.2017, 10:51 | цитировать цитировать  | профиль профиль  |  отправить письмо в личную почту пейджер
Вадим Исаев ака sir Henry:

Я пас... smile smile smile

=====
Каждый выбирает по себе -
Щит и латы, посох и заплаты.
Меру окончательной расплаты
Каждый выбирает для себя.

Вадим Исаев ака sir Henry
Старший модератор

ID: 425

# 2

= общий = | 28.07.2017, 11:04 | цитировать цитировать  | профиль профиль  |  отправить письмо в личную почту пейджер
Лысков Игорь Витальевич:

© Цитата: Лысков Игорь Витальевич
Я пас...

Ай, вах! На Вас была вся надежда... smile

=====
Я только в одном глубоко убеждён - не надо иметь убеждений! :)

Хватов Сергей
Академик

ID: 20764

# 3

= общий = | 28.07.2017, 12:15 | цитировать цитировать  | профиль профиль  |  отправить письмо в личную почту пейджер

Это целиком зависит от платформы. Как и сами понятия пользователи, права,.. Под чем надо запускать?

Андрей Кузнецов aka Dr_Andrew
Старший модератор

ID: 17042

# 4

= общий = | 28.07.2017, 12:19 | цитировать цитировать  | профиль профиль  |  отправить письмо в личную почту пейджер
Хватов Сергей:

© Цитата: Хватов Сергей
Это целиком зависит от платформы.


Ну, если в вопросе упоминается WinAPI, то платформа очевидна, ИМХО... smile

=====
We have but faith: we cannot know;
For knowledge is of things we see;
And yet we trust it comes from thee,
A beam in darkness: let it grow.
-----
https://www.linkedin.com/in/andreynkuznetsov
https://www.researchgate.net/profile/Andrey_Kuznetsov11
http://www.researcherid.com/rid/K-8824-2014

Андрей Кузнецов aka Dr_Andrew
Старший модератор

ID: 17042

# 5

= общий = | 28.07.2017, 12:19 | цитировать цитировать  | профиль профиль  |  отправить письмо в личную почту пейджер
Вадим Исаев ака sir Henry:

К слову, про WinAPI, а CreateProcessWithLogonW Вам, случайно, не подойдёт?

=====
We have but faith: we cannot know;
For knowledge is of things we see;
And yet we trust it comes from thee,
A beam in darkness: let it grow.
-----
https://www.linkedin.com/in/andreynkuznetsov
https://www.researchgate.net/profile/Andrey_Kuznetsov11
http://www.researcherid.com/rid/K-8824-2014

Лысков Игорь Витальевич
Старший модератор

ID: 7438

# 6

= общий = | 28.07.2017, 12:24 | цитировать цитировать  | профиль профиль  |  отправить письмо в личную почту пейджер
Андрей Кузнецов aka Dr_Andrew, Хватов Сергей:

© Цитата: Вадим Исаев ака sir Henry
WinAPI как класс отсутствует напрочь
smile У вас сомнения насчет платформы? smile

=====
Каждый выбирает по себе -
Щит и латы, посох и заплаты.
Меру окончательной расплаты
Каждый выбирает для себя.

Андрей Кузнецов aka Dr_Andrew
Старший модератор

ID: 17042

# 7

= общий = | 28.07.2017, 12:28 | цитировать цитировать  | профиль профиль  |  отправить письмо в личную почту пейджер
Лысков Игорь Витальевич:

У меня нет. Хотя я знаю примеры использования WinAPI и под *nix, но это уже извращения, к которым я не склонен. smile

=====
We have but faith: we cannot know;
For knowledge is of things we see;
And yet we trust it comes from thee,
A beam in darkness: let it grow.
-----
https://www.linkedin.com/in/andreynkuznetsov
https://www.researchgate.net/profile/Andrey_Kuznetsov11
http://www.researcherid.com/rid/K-8824-2014

Вадим Исаев ака sir Henry
Старший модератор

ID: 425

# 8

= общий = | 28.07.2017, 12:30 | цитировать цитировать  | профиль профиль  |  отправить письмо в личную почту пейджер
Андрей Кузнецов aka Dr_Andrew:

Нет, как раз ИМХО (типа wine и прочие погремушки) и нету... smile
Я сделал под Linux программку-монитор, которая периодически опрашивает RFID-антенну на предмет покладания на неё RFID-карточки. И если эту карточку поклали, то с неё считывается номер, формируется ссылка для браузера и пользователь автоматом заходит в свой личный кабинет на нашем сайте. Поскольку программка - служба системная, то браузер надо запускать от имени залогинившегося пользователя, чтобы браузер прочитал заранее введённые для пользователя настройки.
Пытался сделать запуск с помощью system() - фиг вам... Ничего не запускается. Т.е. "ничего", если моя программка запущена как системная служба. А вот если её запустить уже в залогинившемся пользователе (типа: sudo Моя_Программа), то всё чики-пуки - браузер благополучно стартует.

=====
Я только в одном глубоко убеждён - не надо иметь убеждений! :)

• Отредактировал: Вадим Исаев ака sir Henry (Старший модератор)
• Дата редактирования: 28.07.2017, 12:31

Андрей Кузнецов aka Dr_Andrew
Старший модератор

ID: 17042

# 9

= общий = | 28.07.2017, 12:52 | цитировать цитировать  | профиль профиль  |  отправить письмо в личную почту пейджер
Вадим Исаев ака sir Henry:

Хм... Как у Вас всё сложно-то... Сформировать командную строку типа "sudo -u <username> <command>", где <username> - имя пользователя, а <command> - имя запускаемой программы и передать её в качестве параметра в функцию system?

=====
We have but faith: we cannot know;
For knowledge is of things we see;
And yet we trust it comes from thee,
A beam in darkness: let it grow.
-----
https://www.linkedin.com/in/andreynkuznetsov
https://www.researchgate.net/profile/Andrey_Kuznetsov11
http://www.researcherid.com/rid/K-8824-2014

Вадим Исаев ака sir Henry
Старший модератор

ID: 425

# 10

= общий = | 28.07.2017, 12:53 | цитировать цитировать  | профиль профиль  |  отправить письмо в личную почту пейджер

© Цитата: Андрей Кузнецов aka Dr_Andrew
Сформировать командную строку типа "sudo -u <username> <command>", где <username> - имя пользователя, а <command> - имя запускаемой программы и передать её в качестве параметра в функцию system?

Именно так я и сделал. Результат - см. моё сообщение выше.

=====
Я только в одном глубоко убеждён - не надо иметь убеждений! :)

Хватов Сергей
Академик

ID: 20764

# 11

= общий = | 28.07.2017, 13:55 | цитировать цитировать  | профиль профиль  |  отправить письмо в личную почту пейджер

Что за вражеская терминология: системная служба (причём, оба слова)?
Есть процессы, они бывают привилегированные или нет. Есть демоны, есть сервисы, но это уже следующий уровень. Вам что надо: поменять uid/gid процесса, поменять ему environment?.. Всё это можно сделать, если использовать низкоуровневый интерфейс: fork(), exec*()... Но между fork и exec придётся немного повозиться, да и исходный процесс должен быть привилегированным

Вадим Исаев ака sir Henry
Старший модератор

ID: 425

# 12

= общий = | 29.07.2017, 04:34 | цитировать цитировать  | профиль профиль  |  отправить письмо в личную почту пейджер
Хватов Сергей:

Исходный процесс как раз привилегированный - запускается от рута. Запуск происходит после старта компа из /etc/init.d/.
Вот мне как раз и нужно, чтобы процесс запускал браузер не от рута, а от текущего залогинившегося пользователя с его окружением и чтобы текущий пользователь с ним работал, как будто он его сам запустил.

=====
Я только в одном глубоко убеждён - не надо иметь убеждений! :)

Хватов Сергей
Академик

ID: 20764

# 13

= общий = | 29.07.2017, 10:04 | цитировать цитировать  | профиль профиль  |  отправить письмо в личную почту пейджер

Тут основные грабли в другом месте. Запустить графический процесс в чужой графической сессии невозможно: графический сервер к дисплею не пустит. Да и "текущий" - это опять от чужеродной модели: система многозадачная и многопользовательская, никто однозначно к монитору не привязан.
Тут, вероятно надо наоборот: скрипт личного кабинета должен обращаться к демону и получать от него всю авторизационную информацию. Вероятно, через D-BUS, причём через системную шину, так как ни у демона, ни у веб сервера доступа к сессионной шине (а сессий может быть и больше одной) тоже нет.

Вадим Исаев ака sir Henry
Старший модератор

ID: 425

# 14

= общий = | 29.07.2017, 11:15 | цитировать цитировать  | профиль профиль  |  отправить письмо в личную почту пейджер
Хватов Сергей:

Ага, это Вы хорошую мысль подкинули. Я о таком как-то даже и не подумал. Спасибо! smile

=====
Я только в одном глубоко убеждён - не надо иметь убеждений! :)

Андрей Кузнецов aka Dr_Andrew
Старший модератор

ID: 17042

# 15

= общий = | 31.07.2017, 06:00 | цитировать цитировать  | профиль профиль  |  отправить письмо в личную почту пейджер
Хватов Сергей:

Оформите ответ?

=====
We have but faith: we cannot know;
For knowledge is of things we see;
And yet we trust it comes from thee,
A beam in darkness: let it grow.
-----
https://www.linkedin.com/in/andreynkuznetsov
https://www.researchgate.net/profile/Andrey_Kuznetsov11
http://www.researcherid.com/rid/K-8824-2014

Вадим Исаев ака sir Henry
Старший модератор

ID: 425

# 16

= общий = | 01.08.2017, 07:19 | цитировать цитировать  | профиль профиль  |  отправить письмо в личную почту пейджер

В общем я придумал так:
- демон, который следит за покладанием карточки на антенну (запущенный от рута при старте системы, т.к. иначе до устройства не добраться), в случае обнаружения карточки считывает её номер и записывает его в текстовый файл "/tmp/Файл_с_номером.txt".
- второй демон, запущеный от текущего пользователя, следит, не появился ли файл "/tmp/Файл_с_номером.txt". И если появился, считывает оттуда номер, стирает файл, формирует URL и запускает с ним браузер.
Покритикуйте меня кто-нибудь... smile

=====
Я только в одном глубоко убеждён - не надо иметь убеждений! :)

• Отредактировал: Вадим Исаев ака sir Henry (Старший модератор)
• Дата редактирования: 01.08.2017, 09:52

Лысков Игорь Витальевич
Старший модератор

ID: 7438

# 17

= общий = | 01.08.2017, 12:09 | цитировать цитировать  | профиль профиль  |  отправить письмо в личную почту пейджер
Вадим Исаев ака sir Henry:

Как минимум, надо будет проверять, что длина файла ненулевая. Или проверять права доступа на чтение.
Т.к. вполне может быть, что первый демон только создал, даже, возможно, записал, но еще не закрыл, а второй - уже увидел имя.

Вообще-то, лично мне не сильно нравится передача данных через файл.
А нельзя, например, применить какой-нибудь pipe-канал, mail-канал или что-то в таком духе? Или такого нет в Linux?
Сергей Хватов упоминал D-Bus. Как один из вариантов...

=====
Каждый выбирает по себе -
Щит и латы, посох и заплаты.
Меру окончательной расплаты
Каждый выбирает для себя.

• Отредактировал: Лысков Игорь Витальевич (Старший модератор)
• Дата редактирования: 01.08.2017, 12:14

Вадим Исаев ака sir Henry
Старший модератор

ID: 425

# 18

= общий = | 01.08.2017, 12:19 | цитировать цитировать  | профиль профиль  |  отправить письмо в личную почту пейджер
Лысков Игорь Витальевич:

© Цитата: Лысков Игорь Витальевич
А нельзя, например, применить какой-нибудь pipe-канал

Да есть, отчего же нет. Просто я с пипками ещё никогда не работал, как-то не было такой задачи. А просто так, потренироваться, как-то до сих пор не собрался... smile
© Цитата: Лысков Игорь Витальевич
Т.к. вполне может быть, что первый демон только создал, даже, возможно, записал, но еще не закрыл, а второй - уже увидел имя.

Разумно. Я поэкспериментирую, насколько это серьёзная проблема. У меня там в циклах проверки карты\файла стоит задержка в 2 секунды, чтобы комп не перепугать до потери пульса.

=====
Я только в одном глубоко убеждён - не надо иметь убеждений! :)

Вадим Исаев ака sir Henry
Старший модератор

ID: 425

# 19

= общий = | 01.08.2017, 12:20 | цитировать цитировать  | профиль профиль  |  отправить письмо в личную почту пейджер
Лысков Игорь Витальевич:

© Цитата: Лысков Игорь Витальевич
Сергей Хватов упоминал D-Bus. Как один из вариантов...

Аналогично. Тоже пока с этим делом ещё не работал. smile

=====
Я только в одном глубоко убеждён - не надо иметь убеждений! :)

Вадим Исаев ака sir Henry
Старший модератор

ID: 425

# 20

= общий = | 01.08.2017, 12:23 | цитировать цитировать  | профиль профиль  |  отправить письмо в личную почту пейджер
Лысков Игорь Витальевич:

В принципе, можно ещё между двумя демонами организовать TCP-обмен данными. Я такие финтифлюшки уже делал, только забыл про это... smile

=====
Я только в одном глубоко убеждён - не надо иметь убеждений! :)

Лысков Игорь Витальевич
Старший модератор

ID: 7438

# 21

= общий = | 01.08.2017, 12:31 | цитировать цитировать  | профиль профиль  |  отправить письмо в личную почту пейджер
Вадим Исаев ака sir Henry:

TCP - тоже неплохой вариант smile

=====
Каждый выбирает по себе -
Щит и латы, посох и заплаты.
Меру окончательной расплаты
Каждый выбирает для себя.

 

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

Яндекс Rambler's Top100

главная страница | поддержка | задать вопрос

Время генерирования страницы: 0.16482 сек.

© 2001-2017, Портал RFPRO.RU, Россия
Авторское право: ООО "Мастер-Эксперт Про"
Калашников О.А.  |  Гладенюк А.Г.
Версия системы: 7.41 от 25.02.2017
Бесплатные консультации онлайн