Форум: "Прочее";
Текущий архив: 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 вся ветка
Форум: "Прочее";
Текущий архив: 2011.08.21;
Скачать: [xml.tar.bz2];
Память: 0.64 MB
Время: 0.004 c