Запуск приложений из WinService
От: mrjeka Россия  
Дата: 25.09.09 07:50
Оценка:
Господа, подскажите, пожалуйста.


Есть приложение Demo(win приложнение), которое взаимодействует с Service(Console приложение).
Из Demo в Service происходит передача данных туда-сюда.

Demo запускается пользователем

1 вариант: Service запускается пользователем — все работает отлично
2 вариант: Service запускается из Windows Service — вот тут косяк. В TaskManager видно, что процесс создался, но win приложение не видит его.
Выставил галочку allow service to interactive with desctop. Там видно, что Service(консоль) запустилась нормально.


Назрело 2 вопроса

1. Как сделать так, чтобы процессы, запущенные windows service были видны другим приложениям.
2. Можно ли приложение запустить без входа в систему? (предполагается, что в дальнейшем win-service будет запускать эту консольку на сервере и Demo тоже заменится на win-service, т.е. участие пользователя не требуется) Подскажите как это сделать, или скиньте ссылки, где об этом можно почитать.
Re: Запуск приложений из WinService
От: mrjeka Россия  
Дата: 25.09.09 07:57
Оценка:
Здравствуйте, mrjeka, Вы писали:

Да, забыл указать, что ОС Windows Vista. Нашел пост в котором описывают подобный косяк. Остается вопрос, как это дело обойти?
Re: Запуск приложений из WinService
От: Pavel Dvorkin Россия  
Дата: 25.09.09 08:04
Оценка:
Здравствуйте, mrjeka, Вы писали:

M>Господа, подскажите, пожалуйста.



M>Есть приложение Demo(win приложнение), которое взаимодействует с Service(Console приложение).

M>Из Demo в Service происходит передача данных туда-сюда.

M>Demo запускается пользователем


M>1 вариант: Service запускается пользователем — все работает отлично

M>2 вариант: Service запускается из Windows Service — вот тут косяк. В TaskManager видно, что процесс создался, но win приложение не видит его.

Оно создается на другой Window Station. Подробности в MSDN на тему Window Station.

M>Выставил галочку allow service to interactive with desctop. Там видно, что Service(консоль) запустилась нормально.



M>Назрело 2 вопроса


M>1. Как сделать так, чтобы процессы, запущенные windows service были видны другим приложениям.


Им надо при старте указать десктоп. Возможно, придется поиграть с правами доступа.

В Win32 CreateProcess,STARTUPINFO ,lpDesktop

The name of the desktop, or the name of both the desktop and window station for this process. A backslash in the string indicates that the string includes both the desktop and window station names. For more information, see Thread Connection to a Desktop.

В .Net это, по логике вещей, должно быть в Process.ProcessStartInfo, но его там нет

M>2. Можно ли приложение запустить без входа в систему? (предполагается, что в дальнейшем win-service будет запускать эту консольку на сервере и Demo тоже заменится на win-service, т.е. участие пользователя не требуется)


Под чьим аккаунтом ?
With best regards
Pavel Dvorkin
Re[2]: Запуск приложений из WinService
От: Мизантроп  
Дата: 25.09.09 14:05
Оценка: +1
Здравствуйте, Pavel Dvorkin, Вы писали:

PD>Им надо при старте указать десктоп. Возможно, придется поиграть с правами доступа.


PD>В Win32 CreateProcess,STARTUPINFO ,lpDesktop


На XP с Fust User Switching и начиная с Vista этого не достаточно. На XP сессия сервиса может не совпадать с интерактивной сессией, а на Vista они всегла не совпадают. Тут требуется CreateProcessAsUser или CreateProcessWithToken с предварительной установкой ID сессии вызовом SetTokenInformation.
"Нормальные герои всегда идут в обход!"
Re: Запуск приложений из WinService
От: Мизантроп  
Дата: 25.09.09 14:11
Оценка:
Здравствуйте, mrjeka, Вы писали:

M>Господа, подскажите, пожалуйста.



M>Есть приложение Demo(win приложнение), которое взаимодействует с Service(Console приложение).

M>Из Demo в Service происходит передача данных туда-сюда.

M>Demo запускается пользователем


M>1 вариант: Service запускается пользователем — все работает отлично

M>2 вариант: Service запускается из Windows Service — вот тут косяк. В TaskManager видно, что процесс создался, но win приложение не видит его.
M>Выставил галочку allow service to interactive with desctop. Там видно, что Service(консоль) запустилась нормально.


M>Назрело 2 вопроса


M>1. Как сделать так, чтобы процессы, запущенные windows service были видны другим приложениям.


Поясните, что значит видны? Их и так никто никуда не прятал.

M>2. Можно ли приложение запустить без входа в систему? (предполагается, что в дальнейшем win-service будет запускать эту консольку на сервере и Demo тоже заменится на win-service, т.е. участие пользователя не требуется) Подскажите как это сделать, или скиньте ссылки, где об этом можно почитать.


Можно, если это или служба (Service), или приложение, запускаемое службой, при этом такое приложение должно быть готово к тому, что у него не окажется доступа к физической консоле. Вообще говоря, второй вариант — это скорее экзотика, я даже с ходу не могу придумать ситуацию, когда это было-бы оправдано.
"Нормальные герои всегда идут в обход!"
Re[2]: Запуск приложений из WinService
От: mrjeka Россия  
Дата: 25.09.09 17:43
Оценка:
Здравствуйте, Мизантроп, Вы писали:


М>Поясните, что значит видны? Их и так никто никуда не прятал.

Я имею в виду, что когда Service(консольное) запускается из win-service, то Demo не может ни писать ни читать данные. т.е. оно никак не реагирует.

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


Если не трудно, ткните, где можно про это подробно почитать
Мне тоже этот вариант не очень, но мне притащили dll(аналог Demo, только без UI сторонняя) и сказали, чтобы она пахала, надо чтобы была запущена эта консоль (тоже сторонняя). Я тоже им предложил накатать полноценный win-service. Но не знаю что руководство решит.
Re[3]: Запуск приложений из WinService
От: Мизантроп  
Дата: 25.09.09 19:59
Оценка:
Здравствуйте, mrjeka, Вы писали:

M>Я имею в виду, что когда Service(консольное) запускается из win-service, то Demo не может ни писать ни читать данные. т.е. оно никак не реагирует.


M>Мне тоже этот вариант не очень, но мне притащили dll(аналог Demo, только без UI сторонняя) и сказали, чтобы она пахала, надо чтобы была запущена эта консоль (тоже сторонняя). Я тоже им предложил накатать полноценный win-service. Но не знаю что руководство решит.


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

Пока что из изложенного понять что-либо совершенно невозможно.
Вот эта фраза

Я имею в виду, что когда Service(консольное) запускается из win-service, то Demo не может ни писать ни читать данные. т.е. оно никак не реагирует

напоминает о русской народной пословице "В огороде бузина, а в Киеве дядя". Куда оно не может писать? На что оно не желает реагировать и почему она на это реагировать должно? А самое главное, каким образом на всё это влияет факт исполнения или неисполнения службы?
"Нормальные герои всегда идут в обход!"
Re[4]: Запуск приложений из WinService
От: mrjeka Россия  
Дата: 27.09.09 11:04
Оценка:
Здравствуйте, Мизантроп, Вы писали:

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


Я же писал в первом сообщении, что есть 2 приложения.
1-е Service(работает как консольное приложение).
2-е Demo(win приложение), которое взаимодействует с Service (передача/получение данных в/из консольного приложения)
В Demo есть грид, в котором, после нажатия кнопки "Чтение данных", отображаются данные, полученные из Service. Пользователь может изменять эти данные. После нажатия "Сохранить" данные из Demo передаются в Service. (т.е. эту операцию я называю read/write)

Так вот, если запускать Service руками, то Demo может обмениваться данными с Service.
Если же Service запускается из Windows Service или из Task Scheduler, то в Demo данные не отображаются (нет возможности ни читать ни записывать данные)

Надеюсь, понятно изложил.
Re[5]: Запуск приложений из WinService
От: Мизантроп  
Дата: 27.09.09 13:52
Оценка: +1
Здравствуйте, mrjeka, Вы писали:

M>Я же писал в первом сообщении, что есть 2 приложения.

M>1-е Service(работает как консольное приложение).

Service — это service, а консольное приложение — это консольное приложение. Я конечно могу предположить, что у Вас есть приложение, способное выполняться как служба и как консольное приложение. но не более, чем предположить.

M>2-е Demo(win приложение), которое взаимодействует с Service (передача/получение данных в/из консольного приложения)

M>В Demo есть грид, в котором, после нажатия кнопки "Чтение данных", отображаются данные, полученные из Service. Пользователь может изменять эти данные. После нажатия "Сохранить" данные из Demo передаются в Service. (т.е. эту операцию я называю read/write)

Вы конечно вольны называть эту операцию так, как Вам захочется, но елси Вы хотите, чтобы Вас понимали окружающие, то необходимо придерживаться общепринятой терминологии, а не придумывать свою собственную. Как Вы думаете, сколько существует способов interprocess communications? Мне, например, известно порядка 10-ти более-менее самостоятельных, да и то не уверен, что на вскидку вспомнил все. Предлагаете угадать, какой именно используется у Вас?

M>Надеюсь, понятно изложил.


Возможно, кому-то в Вашей формулировке всё ясно, но, к сожалению, не мне. Боюсь, я не в состоянии Вам помочь, извините.
"Нормальные герои всегда идут в обход!"
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.