Delphi - Unable to create process

0

Pełny kod programu (http://4programmers.net/Delphi/Gotowce/Simple_Chat_Server) podczas kompilacji sprawia ze Delphi odmawia posłuszeństwa i nie chce skompilować programu (lub chce a nie może :| )
Przy kompilacji (tworzy się plik exe o rozmiarze 19 kb):
user image
Klikając na RUN w Delphi gdy jest już stworzony plik exe:
user image
Przy próbie odpalenia pliku exe z folderu:
user image

O co chodzi? Z tego co pamiętam kiedyś skompilował mi się ten program bez problemów a teraz ... :|
Jeśli nie chce się wam klikać w link do artykułu to macie kod:

program ChatServ;
{$APPTYPE CONSOLE}

uses
  Windows, WinSock;

type
  PInteger = ^Integer;

var
  I: Integer;
  Tmp: DWord;
  Port: Word;
  Sock: TSocket;
  PInt: PInteger;
  WSAData: TWSAData;
  AdrL, AdrR: TSockAddrIn;
  Clnts: Array of TSocket;

procedure SockThread(Pint: PInteger); stdcall;
var
  Size, I: Integer;
  Buff: Array[0..1023] of Char;
begin
  repeat
    Size := recv(Clnts[PInt^], Buff[0], SizeOf(Buff), 0);
    if Size < 1 then Break;
    for I := 0 to Length(Clnts) -1 do
      if Clnts[I] <> INVALID_SOCKET then
        send(Clnts[I], Buff[0], Size, 0);
  until False;
  shutdown(Clnts[PInt^], SD_BOTH);
  closesocket(Clnts[PInt^]);
  Clnts[PInt^] := INVALID_SOCKET;
  Dispose(PInt);
end;

function HandlerRoutine(CtrlType: DWord): Bool; stdcall;
var
  I: Integer;
begin
  closesocket(Sock);
  for I := 0 to Length(Clnts) -1 do
    if Clnts[I] <> INVALID_SOCKET then begin
      shutdown(Clnts[I], SD_BOTH);
      closesocket(Clnts[I]);
    end;
  Result := True;
end;

begin
  Val(ParamStr(1), Port, Tmp);
  if Port = 0 then begin
    WriteLn('Nieprawidlowy port.');
    Halt(0);
  end;
  if WSAStartUp(MAKEWORD(1,1), WSAData) <> 0 then begin
    WriteLn('Blad Windows Sockets DLL.');
    Halt(0);
  end;
  Sock := socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
  AdrL.sin_family := AF_INET;
  AdrL.sin_addr.S_addr := htonl(INADDR_ANY);
  AdrL.sin_port := htons(Port);
  bind(Sock, AdrL, SizeOf(AdrL));
  if listen(Sock, 5) = SOCKET_ERROR then begin
    WriteLn('Blad gniazda.');
    Exit;
  end;
  SetConsoleCtrlHandler(@HandlerRoutine, True);
  WriteLn('Serwer uruchomiony na porcie ',Port,'...');
  repeat
    I := 0;
    while I < Length(Clnts) do begin
      if Clnts[I] = INVALID_SOCKET then Break;
      Inc(I);
    end;
    if I = Length(Clnts) then SetLength(Clnts, I + 1);
    Tmp := SizeOf(AdrR);
    Clnts[I] := accept(Sock, @AdrR, @Tmp);
    if Clnts[I] = INVALID_SOCKET then Break;
    New(PInt);
    PInt^ := I;
    CreateThread(nil, 0, @SockThread, PInt, 0, Tmp);
  until False;
  WriteLn('Serwer zatrzymany.');
  WSACleanUp();
  Halt(0);
end.
0

Miałem kiedyś podobny problem. Przeinstalowałem Delphi i działało.

0

Spróbuj zapisać projekt gdzieś indziej niż w C:\Program Files

0

Sprawdź uprawnienia jakie ma exek i folder w którym się znajduje. Usuń exeka i skompiluj jeszcze raz. Jeśli dalej nie działa, to sprawdź uprawnienia i jakie czynne uprawnienia ma użytkownik jako, który jest uruchamiane delphi, kompilator i debugger.

0

RedbaK - Przeinstalowałem Delphi i nic.
Ktos - Zapisywałem w różnych lokalizacjach i nic.
maly186 - Jestem na administratorze. A uprawnienia to nie za bardzo wiem o co ci chodzi ?

0

Hmmm, nie wiem dlaczego ale Delphi tworzył chyba DOSowego exe'ka ? Sami spójrzcie
user image

function HandlerRoutine(CtrlType: DWord): Bool; stdcall;
var
  I: Integer;
begin
  closesocket(Sock);
  for I := 0 to Length(Clnts) -1 do
    if Clnts[I] <> INVALID_SOCKET then begin
      shutdown(Clnts[I], SD_BOTH);
      closesocket(Clnts[I]);
    end;
  Result := True;
end;

Wyciąłem ten kod:
SetConsoleCtrlHandler(@HandlerRoutine, True);
i zrobił mi sie normalny exe (pierwszy na zdjęciu). Potem żeby sprawdzić o co chodzi dodałem go ponownie ale dosowy exe już sie nie zrobił. Teraz działa wszystko poprawnie ale nie wiem dlaczego ...

1 użytkowników online, w tym zalogowanych: 0, gości: 1