Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Программно не проходит net send * почему? / 6 сообщений из 6, страница 1 из 1
15.09.2003, 13:53
    #32265085
Zmeishe
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Программно не проходит net send * почему?
Есть программа сервис. Висит в трее.
В случае какой-либо ошибки необходимо сообщить сис-админу, который может быть где угодно за любым из 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
15.09.2003, 14:10
    #32265113
UU
UU
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Программно не проходит net send * почему?
попробуй перенаправить в файл, вдруг он что-то говорит
...
Рейтинг: 0 / 0
15.09.2003, 14:45
    #32265151
Zmeishe
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Программно не проходит net send * почему?
Просьбой пренаправить в файл я грузанул на всю башку своего сис-админа.
А он вроде-как далеко уже не студент. Подскажи нам, как это сделать?
Например из командной строки любые символы после net send * он выводит на экран, а файл не создаёт.
Мы делали так
net send name_comp Test >> d:\send.txt

Да кстати если программно send *, то и в журнал событий ничего не попадает.
Если send name_comp, то сообщение попадает в журнал.
...
Рейтинг: 0 / 0
15.09.2003, 15:01
    #32265176
Zmeishe
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Программно не проходит net send * почему?
Я конечно могу функцией NetServerEnum выдрать все компьютеры в сети по именам, а затем через цикл for рассылать сообщения каждому, но всё-таки интересует - почему-же net send * не катит.
К тому-же звёздочка это одна строка, а цикл это цикл.
...
Рейтинг: 0 / 0
15.09.2003, 16:16
    #32265302
Papka
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Программно не проходит net send * почему?
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
16.09.2003, 09:38
    #32265901
Zmeishe
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Программно не проходит net send * почему?
Сделал по своему. 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
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Программно не проходит net send * почему? / 6 сообщений из 6, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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