Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Низкоуровневое программирование > Win Api
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 09.04.2013, 11:21   #1
Dee63
Пользователь
 
Аватар для Dee63
 
Регистрация: 09.03.2010
Сообщений: 48
По умолчанию Служба Windows и запуск приложения

Всем привет!
У меня такая ситуация:
1. Имеется служба, работающая нормально и правильно.
2. Имеется приложение, которое запускается этой службой. Приложение тоже рабочее и правильное.

Работае это у меня так- служба (Svc) стартует, затем проверяет работает ли приложение (App). Если App не работает, то Svc инициирует его запуск вот так:
Код:
ShellExecute(GetDesktopWindow,'open',pansichar(path),nil,nil,SW_MINIMIZE);
Иначе- ничего не делает.
Если App завершился принудительно (хитрый юзер) или с ошибкой, т.е. отсутствует его дескриптор-то App запускается службой снова. Все тем же способом.

А теперь внимание!
Это все работает на 32 бит XP и 7 (и возможно на 8-не пробовал).
Но это не работает на 64бит.
А не работает именно:
Код:
ShellExecute(GetDesktopWindow,'open',pansichar(path),nil,nil,SW_MINIMIZE);
т.к. служба стартует нормально и висит в списке, работает и откликается.
А вот инструкция на запуск не работает принципиально (я так подозреваю).

Я так понимаю, что дело все в архитектуре 64битной системы. И запуск там осуществляется как-то иначе, чем в 32 бит.

Прошу подсказки как побороть эту проблему.
Dee63 вне форума Ответить с цитированием
Старый 09.04.2013, 11:29   #2
eval
Подтвердите свой е-майл
 
Регистрация: 29.08.2012
Сообщений: 4,011
По умолчанию

запуск гуевого приложения из службы - криво
eval вне форума Ответить с цитированием
Старый 09.04.2013, 11:50   #3
Kix.IV
Участник клуба
 
Регистрация: 11.08.2012
Сообщений: 1,226
По умолчанию

Попробуйте запустить через CreateProcessAsUser
Kix.IV вне форума Ответить с цитированием
Старый 09.04.2013, 11:53   #4
Dee63
Пользователь
 
Аватар для Dee63
 
Регистрация: 09.03.2010
Сообщений: 48
По умолчанию

Цитата:
Сообщение от eval Посмотреть сообщение
запуск гуевого приложения из службы - криво
не криво. Все нормально. В трее висит и не пикает.

Цитата:
Сообщение от Kix.IV Посмотреть сообщение
Попробуйте запустить через CreateProcessAsUser
Попробую.

Цитата:
Сообщение от Kix.IV Посмотреть сообщение
Попробуйте запустить через CreateProcessAsUser
Рассмотрел я этот вариант- он мне не подходит.
В случае архитектуры х86 у меня сервис запускает приложение под пользователем SYSTEM (это и было нужно).
А если использовать Create ProcessAsUser, то запуск будет в активной сессии пользователя. А ему не обязательно видеть что что-то запущено и тем более иметь возможность это завершить.
Конечно мой сервис отслеживает завершение этого приложения, но тем не менее, не хотелось бы вообще показывать.

Последний раз редактировалось Stilet; 10.04.2013 в 22:10.
Dee63 вне форума Ответить с цитированием
Старый 10.04.2013, 10:37   #5
eval
Подтвердите свой е-майл
 
Регистрация: 29.08.2012
Сообщений: 4,011
По умолчанию

то в трее то не виден то надо то не надо ... походу вы не оч. представляете чего делаете
eval вне форума Ответить с цитированием
Старый 10.04.2013, 11:10   #6
Dee63
Пользователь
 
Аватар для Dee63
 
Регистрация: 09.03.2010
Сообщений: 48
По умолчанию

Цитата:
Сообщение от eval Посмотреть сообщение
то в трее то не виден то надо то не надо ... походу вы не оч. представляете чего делаете
Это вы не понимаете о чем я спрашиваю.

Я не спрашиваю "как мне запустить из службы приложение, причем так, чтоб оно у пользователя в активном сеансе появилось в трее?".
Я не спрашиваю "как мне запустить приложение так, чтоб оно висело в трее?".
Реализация окон сделана для красоты и удобства личного. Висение в трее сделано для удобства и гашения интерактивностив 0 сеансе.
Окошки в 0 сеансе в висте, семерке и т.д. вынуждаюют систему информаировать о том, что в этом нулевом сеансе есть приложение, которое хочет с вами повзаимодествовать (т.е. активное окно появилось).

Мой вопрос заключается в следующем:
в системе (Вин7) с архитектруой х86 есть служба, которая выполняет операцию запуска моего приложения от имени SYSTEM в 0 сеансе без интеркативного взаимодействия с пользователем.
Операция запуска такая:
Код:
ShellExecute(GetDesktopWindow,'open',pansichar(path),nil,nil,SW_MINIMIZE);
В итоге я получаю и работающую службу, и запущенное приложение в 0 сеансе, оба от имени SYSTEM.
Цель достигнута.

Однако, такой фокус не прокатывает на архитектуре 64бит на вин 7 (скорее всего и на ХР 64бит не прокатит-не пробовал).
При этом служба запускается от имени SYSTEM, функционирует нормально, не "зависла" и отвечает вовремя, пишет в журнал событий системы требуемую информацию.
НО приложение из службы не запускается. Инструкция запуска такая же, как и для 86 архитектуры:
Код:
ShellExecute(GetDesktopWindow,'open',pansichar(path),nil,nil,SW_MINIMIZE);
Вопрос- как победить эту проблему?
Мне нужно программу или другим способом в службе запустить в 0 сеансе от имени SYSTEM, или все тем же методом, но что-то сделать с запускаемым файлом.
Параметры совместимости я руками правил- не помогает никак.
Dee63 вне форума Ответить с цитированием
Старый 10.04.2013, 11:30   #7
eval
Подтвердите свой е-майл
 
Регистрация: 29.08.2012
Сообщений: 4,011
По умолчанию

это уже надеюсь читали
http://msdn.microsoft.com/en-us/library/bb756986.aspx
?
eval вне форума Ответить с цитированием
Старый 10.04.2013, 12:14   #8
Dee63
Пользователь
 
Аватар для Dee63
 
Регистрация: 09.03.2010
Сообщений: 48
По умолчанию

Цитата:
Сообщение от eval Посмотреть сообщение
это уже надеюсь читали
http://msdn.microsoft.com/en-us/library/bb756986.aspx
?
давным давно уже прочитал.

Суть моего вопроса в другом
Dee63 вне форума Ответить с цитированием
Старый 10.04.2013, 12:52   #9
astecenko
Homo Interneticus
Форумчанин
 
Аватар для astecenko
 
Регистрация: 04.03.2011
Сообщений: 611
По умолчанию

Может дело в пути к запускаемому приложению? Как он определяется?
Возможно нужно вызывать Wow64DisableWow64FsRedirection
astecenko вне форума Ответить с цитированием
Старый 10.04.2013, 13:11   #10
waleri
Старожил
 
Регистрация: 13.07.2012
Сообщений: 6,330
По умолчанию

Цитата:
Сообщение от Dee63 Посмотреть сообщение
Прошу подсказки как побороть эту проблему.
Начните с того, что посмотрите какую ошибку возвращает ShellExecute()
waleri вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Windows служба Лета Win Api 9 05.07.2012 13:06
windows служба welcomeTo C# (си шарп) 2 01.10.2011 03:38
Запуск Delphi- приложения при запуске стандартных программ Windows. Max_0 Общие вопросы Delphi 5 24.11.2010 18:29
Служба Windows Dezmont_ Win Api 7 30.04.2010 10:40
Windows Привязать запуск приложения к клавише. jojahti Windows 10 12.01.2010 17:15