Aplicativo Delphi nao desaloca memoria Windows Server 2008.

186 views
Skip to first unread message

Gustavo Luis H

unread,
Nov 10, 2011, 8:19:58 AM11/10/11
to DUG-RS - Delphi Users Group Rio Grande do Sul
Bom dia Galera.
Estou com um problema.
Utilizo delphi 5 e somente no Server 2008 quando fecho a aplicacao ela
não sai de memoria, os usuarios utilizam o sistema pelo TS, e o
comando que uso para fechar o aplicativo é application.terminate.
Alguma dica?

Rodrigo Sebben

unread,
Nov 10, 2011, 8:23:47 AM11/10/11
to dug...@googlegroups.com
Mata o processo usando Shell ou no DOS mesmo....não tenho o comando aqui comigo, mas já tive que fazer isso em uma aplicação minha.

Flw
Rodrigo



--
Você recebeu esta mensagem porque está inscrito no "DUG-RS -
Delphi Users Group Rio Grande do Sul" em Grupos do Google.
Acesse o nosso BLOG em http://www.dug-rs.org e contribua com a comunidade Delphi do Rio Grande do Sul
Para postar neste grupo, envie um e-mail para dug...@googlegroups.com
Para cancelar a sua inscrição neste grupo, envie um e-mail para
dug-rs-un...@googlegroups.com
Para ver mais opções, visite este grupo em
http://groups.google.com.br/group/dug-rs?hl=pt-BR
Twitter: @dugrs

Flavio Augusto Toldo

unread,
Nov 10, 2011, 11:22:28 AM11/10/11
to dug...@googlegroups.com
tu ja observevou se a aplicação realmente não fecha ou somente a seção que não fecha?

tive o mesmo problema aq mas não era a aplicação que trancava e sim os outros processos(ctfmon e userinit) que iniciam junto do sistema dai coloque na saida da aplicação isso:


var H:AnsiString;
begin
    //finaliza o ctfmon para o logout mais rapido da seção remota.
    h:= 'TASKKILL /F /FI "USERNAME eq '+winlogin+'" /IM ctfmon.exe ';
    WinExec(PAnsiChar(h),SW_SHOW);
    h:= 'TASKKILL /F /FI "USERNAME eq '+winlogin+'" /IM userinit.exe ';
    WinExec(PAnsiChar(h),SW_SHOW);
end;


function WinLogin: String;
//
// Retorna o Usuario que está logado na rede
//
// Esta função requer a unit DBitypes na clausula Uses da unit
//
var
dwUserNameLen : DWord;
FUserName: String;
begin
    dwUserNameLen := dbiMaxUserNameLen + 1; //DBiTypes
    SetLength(FUserName, dwUserNameLen);

    if GetUserName(PChar(FUserName), dwUserNameLen) then //AdvApi32.Dll
       SetLength(FUserName, dwUserNameLen-1)
    else SetLength(FUserName, 0);

    Result := FUserName;
end;

Gustavo Luis Hinterholz

unread,
Nov 10, 2011, 11:25:23 AM11/10/11
to dug...@googlegroups.com
Ja consegui com a procedure Abaixo, e é so no Windows 7 e Server 2008 que rola isso, no resto, funcionou ...

procedure frmTeste.FechaAplicacao();
Var
h : HWND;
Begin
   h:= FindWindow( nil, 'Caption da Tela onde a procedure vai ser chamada.' );
   {Exemplo
   h:= FindWindow( nil, 'Menu Principal' );}
   if h <> 0 then begin
      PostMessage( h, WM_CLOSE, 0, 0 );
   end
End;
Reply all
Reply to author
Forward
0 new messages