powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Программно не проходит net send * почему?
6 сообщений из 6, страница 1 из 1
Программно не проходит net send * почему?
    #32265085
Фотография Zmeishe
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Есть программа сервис. Висит в трее.
В случае какой-либо ошибки необходимо сообщить сис-админу, который может быть где угодно за любым из 500 компов в сети.
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
txt =  "net send имя_компьютера бла-бла-бла" ;
WinExec(txt.c_str(),  0 ); // работает
txt =  "net send * бла-бла-бла" ;
WinExec(txt.c_str(),  0 ); // не работает
сделал
WinExec(txt.c_str(), SW_SHOW); //  на мгновение появляется окно DOS и исчезает
Никаких сообщений никто не видит.

c  ShellExecute( 0 ,  0 , txt.c_str(),  0 ,  0 , SW_SHOW); таже петрушка.

Кто-нибудь знает почему?
...
Рейтинг: 0 / 0
Программно не проходит net send * почему?
    #32265113
UU
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
попробуй перенаправить в файл, вдруг он что-то говорит
...
Рейтинг: 0 / 0
Программно не проходит net send * почему?
    #32265151
Фотография Zmeishe
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Просьбой пренаправить в файл я грузанул на всю башку своего сис-админа.
А он вроде-как далеко уже не студент. Подскажи нам, как это сделать?
Например из командной строки любые символы после net send * он выводит на экран, а файл не создаёт.
Мы делали так
net send name_comp Test >> d:\send.txt

Да кстати если программно send *, то и в журнал событий ничего не попадает.
Если send name_comp, то сообщение попадает в журнал.
...
Рейтинг: 0 / 0
Программно не проходит net send * почему?
    #32265176
Фотография Zmeishe
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я конечно могу функцией NetServerEnum выдрать все компьютеры в сети по именам, а затем через цикл for рассылать сообщения каждому, но всё-таки интересует - почему-же net send * не катит.
К тому-же звёздочка это одна строка, а цикл это цикл.
...
Рейтинг: 0 / 0
Программно не проходит net send * почему?
    #32265302
Papka
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
function NetSend(const sTo, sMessage: string): Boolean;
type
PNetMessageBufferSend = ^TNetMessageBufferSend;
TNetMessageBufferSend = function(
servername: PWideChar;
msgname: PWideChar;
fromname: PWideChar;
buf: PBYTE;
buflen: DWORD
):Integer; stdcall;
var
wMessage, wTo: PWideChar;
i, hLib: Integer;
NetMessageBufferSend: TNetMessageBufferSend;
begin
Result:= False;
hLib:= LoadLibrary('NetApi32.dll');
if hlib > 0 then
try
@NetMessageBufferSend:= GetProcAddress(hLib, 'NetMessageBufferSend');
if @NetMessageBufferSend <> nil then
begin
wMessage:= CoTaskMemAlloc((Length(sMessage) + 1) * sizeof(WideChar));
try
wTo:= CoTaskMemAlloc((Length(sTo) + 1) * sizeof(WideChar));
try
StringToWideChar(sMessage, wMessage, Length(sMessage) + 1);
StringToWideChar(sTo, wTo, Length(sTo) + 1);
i:= NetMessageBufferSend(nil, wTo, nil, PBYTE(wMessage), (Length(sMessage) + 1) * sizeof(WideChar));
Result:= i = ERROR_SUCCESS;
if not Result then
MessageBox(GetForegroundWindow, 'Not send!', nil, $1010);
finally
CoTaskMemFree(wTo);
end;
finally
CoTaskMemFree(wMessage);
end;
end else
MessageBox(GetForegroundWindow, 'Not send!', nil, $1010);
finally
FreeLibrary(hLib);
end
else
MessageBox(GetForegroundWindow, 'Not send!', nil, $1010);
end;

попробуй так
...
Рейтинг: 0 / 0
Программно не проходит net send * почему?
    #32265901
Фотография Zmeishe
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Сделал по своему. MessageBox использовать не могу - за сервером никого нет, никто не увидит. Необходимо выстрелить в сетку на все компьютеры.

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
#include <assert.h>
#include <lmserver.h>
#include <lmapibuf.h>

void __fastcall TfrmMain::SendAll(AnsiString ErrorMessage)
{
 DWORD i;
 NET_API_STATUS Stat;
 LPSERVER_INFO_101 myInfo = NULL;
 LPSERVER_INFO_101 pTmpBuf;
 DWORD level =  101 ;
 DWORD prefmaxlen = - 1 ;
 DWORD entriesread =  0 ;
 DWORD totalentries =  0 ;
 DWORD servertype = SV_TYPE_ALL;
 DWORD resume_handle =  0 ;
 AnsiString txt;

try{
 Stat = NetServerEnum(NULL, level, (LPBYTE*) &myInfo, prefmaxlen,
                      &entriesread, &totalentries, servertype,
                      NULL, &resume_handle);
 if(Stat ==  0 ){
  if((pTmpBuf = myInfo) != NULL){
   for(i =  0 ; i < entriesread; i++, pTmpBuf++){
    assert(pTmpBuf != NULL);
    txt =  "NET SEND "  + AnsiString(pTmpBuf->sv101_name) +  "бла-бла-бла"  + ErrorMessage;
    WinExec(txt.c_str(),  0 );
     }
    }
   }
  }
  __finally
  {
   if(myInfo != NULL) NetApiBufferFree(myInfo);
  }
}
...
Рейтинг: 0 / 0
6 сообщений из 6, страница 1 из 1
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Программно не проходит net send * почему?
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]