Как запустить программу в сеансе пользователя

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

Обсуждение программ nnCron и nnCron LITE
8 posts • Page 1 of 1
Morituruz Posts: 729 Joined: Sun, 14 Oct 2007, 01:51

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

Post by Morituruz » Mon, 13 Dec 2010, 14:32

Есть компьютер, на котором залогинено несколько пользователей (rdp). Можно ли запустить приложение в сеансе другого пользователя, т.е. чтобы оболочка программы открылась в его сеансе, а не в сеансе, в котором работает nncron?

elos Posts: 692 Joined: Tue, 25 Apr 2006, 11:15 Contact:

Re: Запуск приложения в сеансе другого пользователя

Post by elos » Mon, 13 Dec 2010, 15:07

runas вкупе с ключом крона -ns не подойдёт? (сам такое ни разу не пробовал и не надо)

«Везение» — это результат тщательной подготовки, «невезение» — следствие разболтанности и лени. — Роберт Хайнлайн
Хорошо сформулированный вопрос отпадает сам собой.

Morituruz Posts: 729 Joined: Sun, 14 Oct 2007, 01:51

Как запустить программу или игру от имени Администратора в Windows 10

Re: Запуск приложения в сеансе другого пользователя

Post by Morituruz » Mon, 13 Dec 2010, 16:05

В runas вроде как и не предполагается запуск в другом сеансе, окошко открывается тут же, у меня (хотя и с правами того пользователя). К тому же в окошке создания задачи (tm.exe) такой же функционал как и у runas.
Что касается -ns, крон итак с ним запущен =-)

Morituruz Posts: 729 Joined: Sun, 14 Oct 2007, 01:51

Re: Запуск приложения в сеансе другого пользователя

Post by Morituruz » Mon, 13 Dec 2010, 17:36

Получилось провернуть через psexec, но для этого нужно выдать администраторские права той учётке, а это не вариант.

AlikasS Posts: 1513 Joined: Wed, 28 Jun 2006, 05:39 Location: Khabarovsk

Re: Запуск приложения в сеансе другого пользователя

Post by AlikasS » Mon, 13 Dec 2010, 17:54

кстати. Думаю это решение, если оно будет, поможет добавить интерактивности в вин7. Когда крон запущен сервисом

Morituruz Posts: 729 Joined: Sun, 14 Oct 2007, 01:51

Читайте также:
Как сохранить программы при переустановке Андроид

Re: Запуск приложения в сеансе другого пользователя

Post by Morituruz » Mon, 13 Dec 2010, 18:07

О какой интерактивности идёт речь? (вин7 не пользовался)
AlikasS Posts: 1513 Joined: Wed, 28 Jun 2006, 05:39 Location: Khabarovsk

Re: Запуск приложения в сеансе другого пользователя

Post by AlikasS » Tue, 14 Dec 2010, 01:59

в вин7 nncron сервис работает в сессии 0, а пользователя запускает в сессии 1.
тогда как в винХР сервис и пользователь (первый по крайней мере) работают в одной сесии (0).
видно через PROCEXP.EXE.
поэтому в вин7 (я так думаю) сервис крона нужно научить запускать проги и оповещения в другой сессии,
для общения с пользователем.

Morituruz Posts: 729 Joined: Sun, 14 Oct 2007, 01:51

Re: Запуск приложения в сеансе другого пользователя

Post by Morituruz » Tue, 14 Dec 2010, 09:26

Под windows XP, как я уже сказал, нужно чтобы у пользователя, под которым запускается процесс, были права администратора, а в семёрке, насколько я помню, пользователь не под админом работает.

Как завершить сеансы пользователей, если не получается войти в приложение?


Собственно, psexec доступен на сайте microsoft, а если кто хочет проверить под семёркой, то запускать надо так:
PsExec \computer -u user -p password -i 1 program.exe

8 posts • Page 1 of 1

  • Support forums
  • ↳ nnCron forum (English)
  • ↳ nnCron forum (Russian)
  • ↳ Plugins
  • ↳ nnBackup forum (English)
  • ↳ nnBackup forum (Russian)
  • ↳ Translators forum
  • ↳ nnSync forum (Russian)
  • News and announces
  • ↳ nnCron, nnCron LITE and nnBackup news (English)
  • ↳ nnCron, nnCron LITE and nnBackup news (Russian)
  • ↳ nnCron, nnCron LITE and nnBackup news (French)
  • Board index
  • All times are UTC+03:00
  • Delete cookies
  • Contact us

Источник: www.nncron.ru

Как использовать сессии и переменные сессий в PHP

Sajal Soni

Sajal Soni Last updated Feb 16, 2021

Read Time: 7 min

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

Запуск процесса в сеансе пользователя из службы

В Windows Vista/7/2008/2008R2 можно ли вообще запустить процесс в сеансе пользователя из службы? В частности, местная сессия была бы наиболее полезной. Все, что я читал, кажется, говорит, что это невозможно, но я решил, что попрошу здесь, прежде чем полностью отказаться. Я кодирую в VB.NET, но буду принимать предложения во всем.

Brad 27 июнь 2010, в 19:32
Поделиться
Сессия какого пользователя?
John Saunders 27 июнь 2010, в 16:51

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

Читайте также:
Программа как менять голос в скайпе

Brad 27 июнь 2010, в 18:13
Поделиться:
windows-services

5 ответов

Лучший ответ

Это действительно возможно. Основная проблема, с которой вы сталкиваетесь, заключается в том, что Windows следует рассматривать как сервер терминалов и сеанс пользователей как удаленный сеанс. Ваш сервис должен иметь возможность запустить процесс, который выполняется на удаленном сеансе, принадлежит пользователю.

Кстати, если вы пишете службу, которая запускается под Windows XP, которая не добавляется в домен, и активируется быстрая коммутация пользователей, у вас могут быть одинаковые проблемы, чтобы запустить процесс при запуске на втором (третьем и и так далее) запустил рабочий стол пользователей.

Я надеюсь, что у вас есть токен пользователя, который вы получаете, например, в отношении олицетворения или у вас есть dwSessionId сеанса. Если у вас его нет, вы можете попробовать использовать некоторую WTS-функцию (API служб удаленных рабочих столов http://msdn.microsoft.com/en-us/library/aa383464.aspx, например WTSEnumerateProcesses или WTSGetActiveConsoleSessionId ) или LSA-API, чтобы узнать соответствующий сеанс пользователя ( LsaEnumerateLogonSessions см. http://msdn.microsoft.com/en-us/library/aa378275.aspx и LsaGetLogonSessionData см. http://msdn.microsoft.com/en-us/library/aa378290.aspx) или ProcessIdToSessionId (см. http://msdn.microsoft.com/en-us/library/aa382990.aspx).

Вы можете использовать функцию GetTokenInformation с параметром TokenSessionId (см. http://msdn.microsoft.com/en-us/library/aa446671.aspx) для получения идентификатора сеанса dwSessionId сеанса пользователей, если вы знаете токен пользователя hClient .

BOOL bSuccess; HANDLE hProcessToken = NULL, hNewProcessToken = NULL; DWORD dwSessionId, cbReturnLength; bSuccess = GetTokenInformation (hClient, TokenSessionId, cbReturnLength); bSuccess = OpenProcessToken (GetCurrentProcess(), MAXIMUM_ALLOWED, bSuccess = DuplicateTokenEx (hProcessToken, MAXIMUM_ALLOWED, NULL, SecurityImpersonation, TokenPrimary, EnablePrivilege (SE_TCB_NAME); bSuccess = SetTokenInformation (hNewProcessToken, TokenSessionId, bSuccess = CreateProcessAsUser (hNewProcessToken, NULL, szCommandToExecute, . );

Этот код представляет собой только схему. EnablePrivilege — простая функция, используемая AdjustTokenPrivileges для включения привилегии SE_TCB_NAME (см. http://msdn.microsoft.com/en-us/library/aa446619.aspx в качестве шаблона). Важно, чтобы процесс, с которого вы запускаете процесс, имеет привилегию TCB, но если ваша служба запускается в локальной системе, у вас достаточно разрешений. Кстати, следующий фрагмент кода работает не только с учетной записью Local System, но и с учетной записью должна иметь привилегию SE_TCB_NAME , чтобы иметь возможность переключать текущий сеанс сервера терминалов.

Еще одно замечание. В приведенном выше коде мы начинаем новый процесс с той же учетной записью, что и текущий процесс (например, Local System). Вы изменяете код изменения для использования другой учетной записи, например токена пользователя hClient . Важно иметь primary token . Если у вас есть маркер олицетворения, вы можете преобразовать его в первичный токен точно так же, как в приведенном выше коде.

В структуре STARTUPINFO , используемой в CreateProcessAsUser , вы должны использовать lpDesktop = WinSta0Default «.

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

Читайте также:
Дисковод не видит диск программа

Я рекомендую вам также прочитать Как обеспечить, чтобы окно процесса, запущенное Process.Start(ProcessStartInfo), фокусировалось на всех Формах?, где я описываю, как заставить процесс будет запущен на переднем плане на рабочем столе пользователей.

Oleg 27 июнь 2010, в 20:03
Поделиться

Я только что проработал проблему, с которой столкнулся сервис, и нашел ваш ответ здесь . Очень полезно. В моем случае я получал досадную ошибку «отказано в доступе», когда я запускал диалог открытия файла из моего порожденного процесса (в противном случае диалог работал нормально). Вызов CreateEnvironmentBlock и передача результата CreateProcessAsUser кажется, исправили это.

Мне действительно нужно , чтобы установить , что lpDesktop значение моей STARTUPINFO структуры? Я просто оставил его как NULL. Кроме того, это работало без установки этой привилегии SE_TCB_NAME.

paddy 19 сен. 2012, в 05:13
Oleg 19 сен. 2012, в 05:34

Если это помогает, я столкнулся с подобной проблемой, но хотел получить чистое решение powershell.

Я собрал биты с других сайтов и придумал это:

function Invoke-CommandInSession

Да, его немного странно, но он работает — и, самое главное, вы можете называть его из-за ps remoting

Steve 30 янв. 2015, в 19:00
Поделиться

Это можно сделать, но это не считается хорошей практикой для служб напрямую взаимодействовать с сеансами пользователей, поскольку это может создать серьезные дыры в безопасности.

Лучшим подходом является создание двух программ, бэкэнд-сервиса и интерфейса пользовательского интерфейса для конечного клиента. Бэкэнд службы работает все время и предоставляет свои операции с использованием WCF (например). Клиентскую программу можно запустить при запуске сеанса пользователя.

Bear Monkey 27 июнь 2010, в 19:22
Поделиться
ToxicAvenger 27 июнь 2010, в 17:56

Это не совсем то же самое. Брэд спрашивает о создании / new / process с учетными данными пользователя, а не о выполнении интерактивных операций в сеансе пользователя в качестве процесса обслуживания.

Warren Rumak 27 июнь 2010, в 17:56

Запуск процессов в сеансе пользователя все еще взаимодействует с рабочим столом пользователя. Позволяет не распускать волосы, это все еще не хорошая практика. Ссылка была не лучшей, я согласен 🙂

Bear Monkey 27 июнь 2010, в 18:01

Да, моя программа действительно разработана таким образом. Существует клиентское приложение, которое использует удаленное взаимодействие для связи со службой по именованным каналам. Мне нужно найти способ заблокировать рабочую станцию, если кто-то остановит процесс клиента по соображениям безопасности. Я полностью понимаю, что взаимодействие с сеансом пользователя в целом плохое . это немного другое. Спасибо за ваш ответ!

Источник: overcoder.net

Рейтинг
( Пока оценок нет )
Загрузка ...
EFT-Soft.ru