На MSDN почитал, щас попробую
Этот топик читают: Гость
Ответов: 655
Рейтинг: 18
|
|||
карма: 0 |
|
Разработчик
Ответов: 26170
Рейтинг: 2127
|
|||
Gunnman писал(а): SharedStream.CoreName - в SharedStream и FileMapping компонентах такого не нашелНу ты даешь. В SharedStream это свойство
|
|||
карма: 22 |
|
Ответов: 5227
Рейтинг: 587
|
|||
Netspirit, уже опередил
|
|||
карма: 4 |
|
Ответов: 655
Рейтинг: 18
|
|||
hMMF := CreateFileMapping(hFile, nil, PAGE_READWRITE, 0, 0, "Global\"PChar(crn)); ругается на кавычки, без кавычек ругается на неизвестный идентификатор Global.. ------------ Дoбавленo в 17.16: nesco, andrestudio, такое уже пробовал... ------------ Дoбавленo в 17.23: Пробовал Global\Mytest, "Global\Mytest","Local\Mytest",Local\Mytest ...не пашет к сожалению |
|||
карма: 0 |
|
Разработчик
Ответов: 26170
Рейтинг: 2127
|
|||
Gunnman писал(а): не пашет к сожалениюВообще не создает, или не работает как надо |
|||
карма: 22 |
|
Ответов: 4631
Рейтинг: 749
|
|||
nesco, не там прописывает.
Gunnman, nesco писал(а): Ну ты даешь. В SharedStream это свойство CoreName |
|||
карма: 26 |
|
Ответов: 655
Рейтинг: 18
|
|||
В общем все работает урраа! Всем спасибо!
Для того чтобы передать данные в службу и наоборот нужны следующие условия: 1) Отключенный UAC 2) Запуск службы от имени пользователя под которым планируется запуск приложения. 3) В CoreName указываем имя как Global\нужное имя. До этого не получалось потому что был включен UAC. Нюансы: Если служба будет запущена от имени локальной системы, а приложение от имени любого пользователя, то первым - запускаем приложение, вторым - службу. В случае если служба будет запущена от имени учетки пользователя порядок запуска не важен. Минусы: 1) В качестве дескриптора безопасности используется nil...который согласно MSDN делает общую память доступной для всех, т.е. чужой процесс (вирус например) может натворить дел. 2) Запуск службы от имени пользователя, отключение UAC. Прошу помочь допилить компонент SharedStream, нужно добавить создание своего дескриптора безопасности..который будет общим для приложений\служб обменивающихся данными. Подробнее описано тут https://msdn.microsoft.com/ru-ru/library/windows/desktop/aa366537(v=vs.85).aspx и тут https://msdn.microsoft.com/ru-ru/library/windows/desktop/aa379560(v=vs.85).aspx |
|||
карма: 0 |
|
Гость
Ответов: 17029
Рейтинг: 0
|
|||
Редактировалось 7 раз(а), последний 2021-06-21 07:42:56 |
|||
карма: 0 |
|
Разработчик
Ответов: 26170
Рейтинг: 2127
|
|||
195.16.111.220 писал(а): добавите эту информацию в описание компонента? думаю будет не лишнейРабота в службах не является основной функцией компонента SharedStream |
|||
карма: 22 |
|
Ответов: 824
Рейтинг: 138
|
|||
Gunnman, Вот теперь, зная о Ваших изысканиях, ни за что не стану использовать Ваши программы.
Может нужно еще и антивирус отключить? Ну так для надежности, что би Ваши сервисы работали. |
|||
карма: 1 |
|
Разработчик
Ответов: 26170
Рейтинг: 2127
|
|||
Я тоже не сторонник использования общей памяти в качестве обмена между сервисом и приложением. Нормальные люди для этого используют именно сокеты.
|
|||
карма: 22 |
| ||
Голосовали: | sashaoli |
Ответов: 655
Рейтинг: 18
|
|||
sashaoli писал(а): Gunnman, Вот теперь, зная о Ваших изысканиях, ни за что не стану использовать Ваши программы.Может нужно еще и антивирус отключить? Ну так для надежности, что би Ваши сервисы работали. Ну так я же написал, что это потому что общий дескриптор безопасности NULL, если бы он был указан по правилам (ссылки я выкладывал), то все работало бы правильно без отключения UAC и без расшаривания памяти кому попало. Я всего лишь проверил возможность обмена информацией между сервисом и приложением. Собственно DDE и COM и рекомендуется для обмена сообщениями между приложениями, но увы наш DDE в службе не пашет, а COM'а нет. Так что не надо тут с нападками, наоборот считаю что "мои изыскания" как в раз в данном случае полезны, народ будет знать что при таком использовании SharedStream в приложении получается дырка. п.с. я же описал все + и - , в минус как раз есть "1) В качестве дескриптора безопасности используется nil...который согласно MSDN делает общую память доступной для всех, т.е. чужой процесс (вирус например) может натворить дел. 2) Запуск службы от имени пользователя, отключение UAC." Так что я предупреждал, а не рекомендовал к использованию. |
|||
карма: 0 |
|
Ответов: 824
Рейтинг: 138
|
|||
Gunnman, Дело в том, что практически все приложения Windows могут использовать общую память (расшаренную) и большое количество используют в целях передачи информации
О как! И вот как используют - OutputDebugString('Здесь у меня что-там'), то-есть для отладки. И вот этот код, в программе, посылает строчку 'Здесь у меня что-там' в общую память, а отладчик читает эту самую память и выводить строки на экран(пишет лог)... |
|||
карма: 1 |
|
Ответов: 655
Рейтинг: 18
|
|||
sashaoli, А есть примерчик? )))
|
|||
карма: 0 |
|
Ответов: 824
Рейтинг: 138
|
|||
карма: 1 |
| ||
Голосовали: | Gunnman |