Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 EXEC xp_cmdshell Подскажите как послать сообщение на ОС Win Vista и Win 7  [new]
Sergeev Sergey
Member

Откуда:
Сообщений: 4
Не могу послать сообщение (для ОС Vista и 7) с помощью команды msg. (Для приема сообщений нужно HKLM\SYSTEM\CurrentControlSet\Control\Terminal Server\AllowRemoteRPC=1)

EXEC xp_cmdshell 'msg.exe console /server:userpc Сообщение'
Выдает ошибку: Файл изображения c:\windows\system32\msg.exe не поврежден, но предназначен для другого типа компьютера.

Подскажите пожалуйста где ошибка или альтернативный способ.
18 фев 11, 14:04    [10257430]     Ответить | Цитировать Сообщить модератору
 Re: EXEC xp_cmdshell Подскажите как послать сообщение на ОС Win Vista и Win 7  [new]
Александр Спелицин
Member

Откуда: Из ближайшего подмосковья.
Сообщений: 2517
Ошибка в том, что Ваша серверная ОС, где установлен MSSQL не может запустить программу c:\windows\system32\msg.exe.
Win Vista и Win 7 клиентов тут не причем
18 фев 11, 14:17    [10257549]     Ответить | Цитировать Сообщить модератору
 Re: EXEC xp_cmdshell Подскажите как послать сообщение на ОС Win Vista и Win 7  [new]
Crimean
Member

Откуда:
Сообщений: 13147
я сделал sql dll для этого. вместо msg.exe идет прямая работа с WTS API
одно "но" - акаунт сиквела надо будет делать локальным админом на машинах получателей
а то получите ошибку 5
18 фев 11, 14:24    [10257601]     Ответить | Цитировать Сообщить модератору
 Re: EXEC xp_cmdshell Подскажите как послать сообщение на ОС Win Vista и Win 7  [new]
J.d
Member

Откуда: Москва
Сообщений: 691
Crimean,

о, а подробнее можно? ) вы написали ком-объект? а как взаимодейтсвует со средой mssql?
просветите, если не сложно =)
18 фев 11, 14:26    [10257621]     Ответить | Цитировать Сообщить модератору
 Re: EXEC xp_cmdshell Подскажите как послать сообщение на ОС Win Vista и Win 7  [new]
Sergeev Sergey
Member

Откуда:
Сообщений: 4
Александр Спелицин
Ошибка в том, что Ваша серверная ОС, где установлен MSSQL не может запустить программу c:\windows\system32\msg.exe.
Win Vista и Win 7 клиентов тут не причем



С командной строки запускаю msg.exe console /server:userpc Сообщение
Все работает.
18 фев 11, 14:32    [10257668]     Ответить | Цитировать Сообщить модератору
 Re: EXEC xp_cmdshell Подскажите как послать сообщение на ОС Win Vista и Win 7  [new]
Sergeev Sergey
Member

Откуда:
Сообщений: 4
J.d
Crimean,

о, а подробнее можно? ) вы написали ком-объект? а как взаимодейтсвует со средой mssql?
просветите, если не сложно =)



Подробнее нужно средствами MS SQL посылать сообщение на компьютеры с ОС Win Vista, Win 7 и WinXP.
На компьютеры с ОС WinXP
EXEC xp_cmdshell 'net send userpc Сообщение'
Работает, но в ОС Win Vista и Win 7 сервис "Messenger" отсутствует и командой net send сообщение не пошлешь.
Вопрос как средствами MS SQL послать сообщение на ПК с ОС Win Vista и Win 7?
18 фев 11, 15:00    [10257972]     Ответить | Цитировать Сообщить модератору
 Re: EXEC xp_cmdshell Подскажите как послать сообщение на ОС Win Vista и Win 7  [new]
J.d
Member

Откуда: Москва
Сообщений: 691
Sergeev Sergey,

ну это я всё в курсе как раз) вопрос да
автор
как средствами MS SQL послать сообщение на ПК с ОС Win Vista и Win 7?
18 фев 11, 15:28    [10258261]     Ответить | Цитировать Сообщить модератору
 Re: EXEC xp_cmdshell Подскажите как послать сообщение на ОС Win Vista и Win 7  [new]
Sergeev Sergey
Member

Откуда:
Сообщений: 4
J.d
Sergeev Sergey,

ну это я всё в курсе как раз) вопрос да
автор
как средствами MS SQL послать сообщение на ПК с ОС Win Vista и Win 7?


Да
18 фев 11, 15:31    [10258293]     Ответить | Цитировать Сообщить модератору
 Re: EXEC xp_cmdshell Подскажите как послать сообщение на ОС Win Vista и Win 7  [new]
Crimean
Member

Откуда:
Сообщений: 13147
если в двух словах, то как-то так

RETCODE SendMessage(SRV_PROC *srvproc, DBCHAR *HostName, DBCHAR *Header, DBCHAR *Message, DBINT *ErrorNo, DBCHAR *ErrorMsg)
{
	HANDLE server = WTSOpenServer( HostName );
	if( server == NULL ) 
	{
		*ErrorNo = GetLastError();
		sprintf( ErrorMsg, "Cant find host [%s]", HostName );
		return XP_ERROR;
	}
	
	WTS_SESSION_INFO *info = NULL;
	DWORD count = 0;
	DWORD sent = 0;

	if( WTSEnumerateSessions( server, 0, 1, &info, &count ))
	{
		for( DWORD i = 0 ; i < count ; i ++ )
		{
			if( info[i].State != WTSActive ) continue;

			DWORD responce = 0;	// игнорируем
			if( WTSSendMessage( server, info[i].SessionId, Header, strlen( Header ), Message, strlen( Message ), MB_OK, 0, &responce, false))
			{
				sent += 1;
			}
			else
			{
				*ErrorNo = GetLastError();
				sprintf( ErrorMsg, "Cant send message to [%s]", info[i].pWinStationName );
			}
		}
	}
	else
	{
		*ErrorNo = GetLastError();
		sprintf( ErrorMsg, "Cant get session list for [%s]", HostName );
	}

	if( info != NULL ) WTSFreeMemory ( info );
	WTSCloseServer( server );

	if( *ErrorNo == 0 && sent == 0 )
	{
		*ErrorNo = -1;
		sprintf( ErrorMsg, "Cant find active session(s) for [%s]", HostName );
		return XP_ERROR;
	}

	return ((sent != 0) ? XP_NOERROR : XP_ERROR);
}

но могу готовую либу отдать 32/64 версии
18 фев 11, 15:34    [10258319]     Ответить | Цитировать Сообщить модератору
 Re: EXEC xp_cmdshell Подскажите как послать сообщение на ОС Win Vista и Win 7  [new]
Crimean
Member

Откуда:
Сообщений: 13147
P.S.
работает для Xp / Vista / 7, но для XP достаточно отправителя помещать в Remote Desktop Users, а для висты / 7 - только в админов. открывали инцидент по этому поводу, ответили "так и делайте". собственно это и послужило причиной написания именно SQL DLL, чтобы только акаунт сиквела помещать в локальных админов, типа меньшее из зол..
18 фев 11, 15:35    [10258338]     Ответить | Цитировать Сообщить модератору
 Re: EXEC xp_cmdshell Подскажите как послать сообщение на ОС Win Vista и Win 7  [new]
J.d
Member

Откуда: Москва
Сообщений: 691
спасибо!

пс готовую не надо)
18 фев 11, 15:59    [10258577]     Ответить | Цитировать Сообщить модератору
Между сообщениями интервал более 1 года.
 Re: EXEC xp_cmdshell Подскажите как послать сообщение на ОС Win Vista и Win 7  [new]
shanton
Member

Откуда: Украина г. Хмельницкий
Сообщений: 628
Crimean,

Для отправки сообщения пользователям использую:
SET @MSG = 'net send ' + @USER_NAME + ' Техническое решение №' + @MSG00
EXEC xp_cmdshell @MSG

проблема с ОС 7. Уважаемый Crimean, вы реализовали отправку сообщений с помощью sql dll, если у вас есть возможность поделиться готовой либой, буду вам очень благодарен. Я имел опыт создания dll как COM-обьекта, для работы с API функциями SolidWorks, реализовал в ATL-проекте VS2008 C++. Но новичок разбиралься долго и нудно, поэтому прошу вашей помощи.
13 янв 15, 18:36    [17112703]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить