Сейчас на форуме: tyns777, zds, JustLife (+4 невидимых)

 eXeL@B —› Программирование —› CreateFileMapping+MapViewOfFile для взаимодействия сервиса и приложения. Помогите найти проблему...
Посл.ответ Сообщение


Ранг: 450.3 (мудрец), 13thx
Активность: 0.20
Статус: Участник

Создано: 19 февраля 2010 03:04
· Личное сообщение · #1

Подобный код использовал в 2-х приложениях:
Code:
  1. hFileMapObj:=CreateFileMapping($FFFFFFFF,Nil,PAGE_READWRITE,0,4,' noname');
  2. If hFileMapObj<>0 Then X:=MapViewOfFile(hFileMapObj,FILE_MAP_WRITE,0,0,4);

Первое приложение при запуске проверяло запущенное ли второе и если нет - запускало. Далее второе оставалось висеть в памяти и когда снова запускали первое - всё работало хорошо. Очередность запуска роли не играла.
Теперь второе приложение я сделал в виде сервиса. Тут и начались проблемы.
Если сервис запущен - приложение не может получить доступ к памяти. Общий доступ не работает.
Если запустить приложение, а затем стартовать сервис - тогда работает.
Причем при перезапуске приложения - всё ок тоже.
Главный вывод, что сервис должен стартовать не ранее приложения...
Помогите найти засаду....



Ранг: 309.8 (мудрец), 21thx
Активность: 0.170
Статус: Участник

Создано: 19 февраля 2010 03:14
· Личное сообщение · #2

Возможно имя объекта надо поместить в директорию GLOBAL?

-----
Shalom ebanats!




Ранг: 17.0 (новичок)
Активность: 0.020
Статус: Участник

Создано: 19 февраля 2010 04:38
· Личное сообщение · #3

Главный вывод, что сервис должен стартовать не ранее приложения...
Запускай приложение а из него сервис в чем проблема то.




Ранг: 450.3 (мудрец), 13thx
Активность: 0.20
Статус: Участник

Создано: 19 февраля 2010 05:03 · Поправил: ToBad
· Личное сообщение · #4

SLV Спасибо за ответ! Пока рыл гугл на тему GLOBAL наткнулся на: "Служба выполняется под системной учетной записью, а права доступа по умолчанию при SecurityAttributes=nil - доступно только владельцу." Код нужный нашёл там же.

neoBlinXaker пишет:
Запускай приложение а из него сервис в чем проблема то.


Думал об этом, но захотелось сделать автозапуск сервиса...

Есть ещё одна проблема, в сервисе ставлю глобальный хук на кнопки:
Code:
  1. hook:=SetWindowsHookEx(WH_KEYBOARD_LL, @KeyboardProc, HInstance, 0);

Хук работает только если установить Interactive, либо Allow service to interact With Desktop в опциях запуска сервиса... Я не знаю чем это плохо, но не понимаю что не даёт работать хуку без этого...



Ранг: 237.0 (наставник), 20thx
Активность: 0.130
Статус: Участник
sysenter

Создано: 19 февраля 2010 09:41
· Личное сообщение · #5

ToBad пишет:
Хук работает только если установить Interactive, либо Allow service to interact With Desktop в опциях запуска сервиса... Я не знаю чем это плохо, но не понимаю что не даёт работать хуку без этого...

Это как бы привязка к окнам вообще. Иначе сервис не имеет права с ними работать.

-----
продавец резиновых утёнков





Ранг: 450.3 (мудрец), 13thx
Активность: 0.20
Статус: Участник

Создано: 19 февраля 2010 14:54
· Личное сообщение · #6

HiEndsoft пишет:
Это как бы привязка к окнам вообще. Иначе сервис не имеет права с ними работать.


Всё понятно!

Большое спасибо всем за помощь и участие!


 eXeL@B —› Программирование —› CreateFileMapping+MapViewOfFile для взаимодействия сервиса и приложения. Помогите найти проблему...
Эта тема закрыта. Ответы больше не принимаются.
   Для печати Для печати