Страницы: 1 2 вся ветка
Форум: "Прочее";
Поиск по всему сайту: delphimaster.net;
Текущий архив: 2011.08.21;
Скачать: [xml.tar.bz2];




Вниз

PlaySound из Windows Service под Windows 2008 Server 


DVM ©   (2011-04-28 12:56) [0]

Возникла необходимость дать службе возможность издавать звук. Зачем - долго объяснять, но вот надо и все. Само собой, начиная с Windows Vista это не получается сделать.
Вариант с созданием отдельного приложения, запускаемого на десктопе залогиненного пользователя и взаимодействующего со службой (что вобщем то является идеологически правильным) отпадает, так служба запущена на сервере и там нет залогиненных пользователей.

Может у кого есть какие мысли как заставить сервис издать звук?
Если коротко, то это своего рода оповещение о неполадках.



clickmaker ©   (2011-04-28 13:17) [1]

> так служба запущена на сервере и там нет залогиненных пользователей

а кто тогда слушатель? или это для развлечения одмина, запертого в серверной? )



DVM ©   (2011-04-28 13:50) [2]


> а кто тогда слушатель? или это для развлечения одмина, запертого
> в серверной? )

Скорее для привлечения админа или кого-то подобного ибо звук от сервера выведен в другое помещение.



Вариант   (2011-04-28 13:59) [3]


> DVM ©   (28.04.11 12:56)

Не пробовал издавать звуки из под сервиса, возможно поможет это ->
http://www.microsofttranslator.com/bv.aspx?from=ru&to=en&a=http%3A%2F%2Fsupport.microsoft.com%2Fkb%2F255584%2Fen-us%3Ffr%3D1

И второй вариант, возможно просто использовать waveOutOpen и т.д.???

PS:Кстати мы для привлечения админа шлем ему SMS(у нас есть такая возможность), email и сообщение через net send



OW ©   (2011-04-28 13:59) [4]


> Может у кого есть какие мысли

может, письмо/смс?



Inovet ©   (2011-04-28 14:20) [5]

> [3] Вариант   (28.04.11 13:59)
> waveOutOpen и т.д.???
>
> PS:Кстати мы для привлечения админа шлем ему SMS(у нас есть
> такая возможность), email и сообщение через net send

В колонкак и в текстовых сообщениях: "Вставай проклятьем заклеймённый". Вобщем, действительно при наличии сети (а зачем без неё сервер), как-то неправильно тянуть звуковые провода в другое помещение, опять же все могут быть на обеде или дома.



Anatoly Podgoretsky ©   (2011-04-28 14:22) [6]

> DVM  (28.04.2011 12:56:00)  [0]

И там некому слушать!



Anatoly Podgoretsky ©   (2011-04-28 14:23) [7]

> OW  (28.04.2011 13:59:04)  [4]

Курьерской службой



Empleado ©   (2011-04-28 14:26) [8]


> DVM ©   (28.04.11 12:56)  

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



Медвежонок Пятачок ©   (2011-04-28 14:33) [9]

Может у кого есть какие мысли как заставить сервис издать звук?

Если служба начнет печатать текст обращения к админу на чешском телеграфном аппарате Т-100, то админ реально сможет это услышать



clickmaker ©   (2011-04-28 14:33) [10]

> Курьерской службой

голубиной почтой, а голубя натренировать на звук



Медвежонок Пятачок ©   (2011-04-28 14:40) [11]

выдвинуть лоток цидирома.
к лотку привязать ниточку.
ниточка дергает тумблер.
тумблер включает бумбокс.

вариант: ниточка переводи стрелки часов с кукушкой на 23:00



OW ©   (2011-04-28 14:45) [12]


> выдвинуть лоток цидирома.
> к лотку привязать ниточку.
> ниточка

открывает решетку клетки и голубь полетел..



clickmaker ©   (2011-04-28 14:48) [13]

> выдвинуть лоток цидирома

задвинуть лоток сидирома с предустановленной чашкой кофе
кофе проливается на клетку с попугаем
попугай орет в микрофон "серррвер накрывается, кррретины!"
звук от микрофона выведен в нужные места офиса



DVM ©   (2011-04-28 15:20) [14]


> PS:Кстати мы для привлечения админа шлем ему SMS(у нас есть
> такая возможность), email и сообщение через net send

Слать то я разумеется шлю, сервис отправляет данные о проблеме клиентскому ПО, установленному на машине дежурного администратора, тут проблем нет. Но, этого как показывает практика, недостаточно. Дежурный администратор может уснуть, отключить у себя эту клиентскую программу или забыть ее запустить, отойти и т.д. Поэтому было решено подключить колонку к серверу и вывести от нее звук в помещение где сидит дежурный админ. Но сервис, зараза звуки не издает.

SMS хорошо бы, но админы разные, телефоны разные, не совсем подходит.
Нужен постоянный и длительный раздражитель :)


> выдвинуть лоток цидирома.
> к лотку привязать ниточку.
> ниточка дергает тумблер.
> тумблер включает бумбокс.

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

Пока наилучший пришедший в голову вариант - звонить на IP телефон админа из службы (благо IP телефония используется).



clickmaker ©   (2011-04-28 15:27) [15]

а как-нибудь через CreateProcessAsUser нельзя извратиться?



DVM ©   (2011-04-28 15:28) [16]


> Вариант   (28.04.11 13:59) [3]

Посмотрел по ссылке. Скорее всего не поможет, ибо:
1) Статья 2006 года, висты еще не было вроде.
2) Под XP звук из сервиса есть!
3) Моя служба не LOCALSYSTEM и не может ей быть, иначе она не сможет мониторить то, что мониторит. Служба запускается от имени определенного пользователя, так что в профиле его все прописано правильно насчет звуковых устройств. Эта же служба запущенная как консольное приложение звук прекрасно под этим же пользователем издает.



Вариант   (2011-04-28 15:36) [17]


> DVM ©   (28.04.11 15:28) [16]

Ок, буду  знать, что не поможет - отрицательный результат - тоже результат. А что насчет waveOutXXX???

Или хочется таки одной командой вывести звук?



DVM ©   (2011-04-28 15:43) [18]


> Вариант   (28.04.11 15:36) [17]


> А что насчет waveOutXXX???

Я пока искал, натыкался на обсуждения различных метов вывода звука, там и DirectSound пробовали - безрезультатно. Думаю PlaySound сводится к тем же более низкоуровневым функциям.

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



DiamondShark ©   (2011-04-28 16:10) [19]


> DVM ©   (28.04.11 15:28) [16]
>  Скорее всего не поможет, ибо:

Т.е., теоретизировать лучше, чем проверить?


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

При интерактивном и неинтерактивном входе реестры могут какбэ немного отличаться.
Дамп нужной ветки реестра в двух случаях решил бы это однозначно.
Но теоретизировать лучше.


> Думаю PlaySound сводится к тем же более низкоуровневым функциям.

К тем же, да не совсем. PlaySound работает с устройством по умолчанию, а в waveOutXXX устройство можно явно указать.

Ну и, разумеется, код никто никому не покажет.



DVM ©   (2011-04-28 16:14) [20]


> DiamondShark ©   (28.04.11 16:10) [19]


> Ну и, разумеется, код никто никому не покажет.

Код чего ты хочешь увидеть? Вызова PlaySound? Службы? Какой код?


> Т.е., теоретизировать лучше, чем проверить?

Я проверю, не переживай.



DVM ©   (2011-04-28 16:17) [21]


> DiamondShark ©   (28.04.11 16:10) [19]



> При интерактивном и неинтерактивном входе реестры могут
> какбэ немного отличаться.

Проверял? Или теоретизируешь?



DiamondShark ©   (2011-04-28 16:18) [22]


> DVM ©   (28.04.11 16:14) [20]

Вызова PlaySound.
С результатами диагностики.


> Я проверю, не переживай.

Гы. Мне вообще-то пофиг. Проблема у тебя, а не у меня.
Но за пол-дня ты так и не проверил, исключительно из философских соображений.



DiamondShark ©   (2011-04-28 16:20) [23]


> DVM ©   (28.04.11 16:17) [21]

Тебе зарплату за работающие программы платят, или за "поймай на слове чувака с форума"?



Jan   (2011-04-28 16:49) [24]

Пишем приложение, которое запускает звук и по событию, событие порождаем из сервиса. А вообще сама постановка задачи - бред)



DVM ©   (2011-04-28 17:11) [25]


> Jan   (28.04.11 16:49) [24]


> Пишем приложение, которое запускает звук и по событию, событие
> порождаем из сервиса.

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



sniknik ©   (2011-04-28 17:32) [26]

> А вообще сама постановка задачи - бред)
да ну?
представь кучу стоек с серверами, мониторов нет, где то "глюк" (позвонили клиенты сказали сайт/что то х.з. что ...  не работает... а у тебя все ок, пингуется, т.е. проблема где то в приложении, и предположим приложение твое...), "идти на звук" гораздо удобнее чем считать стойки/читать таблички с номерами серверов.



DVM ©   (2011-04-28 17:50) [27]


> DiamondShark ©   (28.04.11 16:18) [22]


> Вызова PlaySound.
> С результатами диагностики.

Ну тут все проще простого. PlaySound ошибки не выдает, т.е результат ее исполнения TRUE. Просто звука нет. Попробую переделать на waveOutXXX, но что-то мне подсказывает, что не в этом дело.


procedure TPlaySoundThread.Execute;
begin
 while not Terminated do
   begin
     try
       ....
       Win32Check(PlaySound(PChar(SoundFile), 0, SND_FILENAME or     SND_NOWAIT));
       ....
     except
       on e: Exception do
         Logger.Error(e.ClassName + " : " + e.Message);
     end;
   end;
end;



clickmaker ©   (2011-04-28 18:03) [28]

флаг SND_SYSTEM не поможет?



Jeer ©   (2011-04-28 18:10) [29]

Вывести сигнал на порт.
Службе не возбраняется делать это.



DiamondShark ©   (2011-04-28 18:12) [30]


> DVM ©   (28.04.11 17:50) [27]
> Ну тут все проще простого. PlaySound ошибки не выдает

И не выдаст в таком варианте. Добавь SND_NODEFAULT.

Как на счёт доступности файла? Попробуй его открыть с логированием результата.

У меня нет висты и выше под рукой, сам проверить не могу.
Если с результатом и с доступом к файлу всё ок, может флажок SND_SYSTEM поможет.



Inovet ©   (2011-04-28 18:51) [31]

А флаг SERVICE_INTERACTIVE_PROCESS к выводу звука имеет отношение?



DiamondShark ©   (2011-04-28 19:06) [32]


> Inovet ©   (28.04.11 18:51) [31]
> А флаг SERVICE_INTERACTIVE_PROCESS к выводу звука имеет
> отношение?

Абсолютно никакого.



Jan   (2011-04-28 21:08) [33]


> да ну?
> представь кучу стоек с серверами, мониторов нет, где то
> "глюк" (позвонили клиенты сказали сайт/что то х.з. что .
> ..  не работает... а у тебя все ок, пингуется, т.е. проблема
> где то в приложении, и предположим приложение твое...),
> "идти на звук" гораздо удобнее чем считать стойки/читать
> таблички с номерами серверов

там другая ситуация - нужно просто подать знак, если что-то не так судя по описанию автора

> Нет залогиненного пользователя, нет интерактивной сессии,
>  этому приложению негде исполняться со звуком точно так
> же как и сервису

пожно спикером попищать, выдать управляющий сигнал на lpt/com, а там ключ с реле присобачить



DVM ©   (2011-04-28 22:24) [34]


> DiamondShark ©   (28.04.11 18:12) [30]


> И не выдаст в таком варианте. Добавь SND_NODEFAULT.

то же самое, PlaySound ошибок не возвращает. Звука нет.


> Как на счёт доступности файла? Попробуй его открыть с логированием
> результата.

Файл доступен 100%. Служба запущена от имени того же самого пользователя, от которого я ее запускаю как консольное приложение, в режиме консольного приложения звук есть. На всякий случай проверил - есть доступ.


> У меня нет висты и выше под рукой, сам проверить не могу.
>
> Если с результатом и с доступом к файлу всё ок, может флажок
> SND_SYSTEM поможет.

Не, тоже не помог. Тишина, ошибок нет.


> Inovet ©   (28.04.11 18:51) [31]
> А флаг SERVICE_INTERACTIVE_PROCESS к выводу звука имеет
> отношение?

Этот флаг теперь вообще мало что меняет, если вообще что меняет.


> пожно спикером попищать, выдать управляющий сигнал на lpt/com,
>  а там ключ с реле присобачить

Спикер тоже из службы молчит :)



Eraser ©   (2011-04-28 22:34) [35]

>
>
> [0] DVM ©   (28.04.11 12:56)

в висте полностью переделали звуковую архитектуру в очередной раз, так что подозреваю, что прямого решения нет. самое простое - запускать процесс воспроизводящий звук в нужной терминальной сесии. Вот пример http://rouse.drkb.ru/winapi.php#servicenotifyer



DVM ©   (2011-04-28 22:43) [36]


> Eraser ©   (28.04.11 22:34) [35]


> самое простое - запускать процесс воспроизводящий звук в
> нужной терминальной сесии

Для этого эту сессию надо организовать. На сервере нет залогиненных пользователей как я уже говорил, нет доступной терминальной сессии откуда бы я мог с помощью отдельного процесса вывести звук.



Inovet ©   (2011-04-28 22:53) [37]

Виндоус звук выдаёт ещё до логина, значит можно, только какой своей частью она это делает.



Rouse_ ©   (2011-04-28 23:03) [38]


> Но, этого как показывает практика, недостаточно. Дежурный
> администратор может уснуть, отключить у себя эту клиентскую
> программу или забыть ее запустить, отойти и т.д.

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



Rouse_ ©   (2011-04-28 23:07) [39]

Ну и до кучи NetMessageBufferSend глобально должен разбудить заспанного админа.



sniknik ©   (2011-04-28 23:10) [40]

> нужно просто подать знак
в чем бредовость "подания" знака звуком? заодно и амина "закемарившего" разбудит...
и, да, можно по сети послать команду на рабочую станцию... ну, а если это неполадки сети.
и да может можно чего то другое придумать (типа лотка жмущего )

p.s. честно, достает уже. советы от даже не пытающихся вникнуть/представить ситуацию, но заявляющих, утрировано "автор сам дурак. раз делает не так как делал бы они... если бы могли".
сам недавно был в практически такой же ситуации.
http://delphimaster.net/view/1-1297432020/

> в нужной терминальной сесии.
и где же ты сессия когда ты так нужна... :)
> [0] служба запущена на сервере и там нет залогиненных пользователей.

> писискрипер же есть в наличии
> Спикер тоже из службы молчит :)

> NetMessageBufferSend
а сети к примеру нет. отвалилась. о чем и нужно посигналить...




Страницы: 1 2 вся ветка
Форум: "Прочее";
Поиск по всему сайту: delphimaster.net;
Текущий архив: 2011.08.21;
Скачать: [xml.tar.bz2];




Наверх





Память: 0.83 MB
Время: 0.079 c
9-1189570735      XProger               2007-09-12 08:18  2011.08.21  
Конкурс "MiniGames"


15-1304274899     IPranker              2011-05-01 22:34  2011.08.21  
C++ константы -> Delphi константы.


15-1304022600     Юрий                  2011-04-29 00:30  2011.08.21  
С днем рождения ! 29 апреля 2011 пятница


15-1304242479     И. Павел              2011-05-01 13:34  2011.08.21  
Как отловить информацию о запускаемых программах?


1-1263466343      NBAH1990              2010-01-14 13:52  2011.08.21  
Копирование текста из Ворда в RichViewEdit