Cita:
Empezado por ElGatitoTapatio
pero creo que es una pista el que, si ejecuto los mismos procedimientos fuera del hilo corren perfectamente, solo cuando los meto al hilo es el problema.... alguna idea que se les ocurra para tomar camino por ese lado?
|
Realmente lamento no poder probar en este momento el resto del código. Si el problema no está en el hilo ni en los procedimientos que has probado por separado, no se...
Aunque no pareciera ser el causante del problema, y por las dudas, probá de este modo para asergurarte que
WNetCancelConnection2 se ejecute:
Código Delphi
[-]
procedure TEnviarTemporales.EnviarDocumentos;
var
NetResource: TNetResource;
vRuta,NuevaRuta : PChar;
Error,Diagonal : String;
ErrCode,i : integer;
Listado,ListadoEliminar : TStrings;
begin
with ServidorAlmacenamiento,frm_main do
begin
Listado:= TStringList.Create;
ListadoEliminar:= TStringList.Create;
if not Activo then Exit;
ArchivosdeRuta(AlmacenamientoTemporal,Listado);
if Listado.Count = 0 then Exit;
StatusBar.Panels.Items[2].Text:= 'Transfiriendo documentos temporales...';
vRuta:= PChar(Ruta);
NetResource.dwType := RESOURCETYPE_DISK;
NetResource.lpLocalName := nil;
NetResource.lpRemoteName := vRuta;
NetResource.lpProvider := nil;
if not Local and not Abierto then
begin
try if (Usuario = '') then
ErrCode := WNetAddConnection2(NetResource, nil, nil, CONNECT_TEMPORARY)
else
ErrCode := WNetAddConnection2(NetResource, PChar(Pass), PChar(Usuario), CONNECT_TEMPORARY);
case ErrCode of
5 : Error:= 'ERROR_ACCESS_DENIED';
85 : Error:= 'ERROR_ALREADY_ASSIGNED';
67 : Error:= 'ERROR_BAD_NET_NAME';
86 : Error:= 'ERROR_INVALID_PASSWORD';
1203 : Error:= 'ERROR_NO_NET_OR_BAD_PATH';
1222 : Error:= 'ERROR_NO_NETWORK';
else Error:= IntToStr(ErrCode);
end;
if ErrCode <> 0 then
begin
Mensaje(3,-1,'','Error al conectar al servidor de almacenamiento. ('+Error+')');
hLog('Error al conectar al servidor de almacenamiento. ('+Error+')');
end;
try
if AlmacenamientoTemporal[Length(AlmacenamientoTemporal)] <> '\' then
Diagonal := '' else
Diagonal:= '\';
for i := 0 to Listado.Count-1 do
begin
NuevaRuta:= PChar(vRuta+AnsiReplaceStr(Listado[i],frm_main.AlmacenamientoTemporal,Diagonal));;
if FileExists(NuevaRuta) then
begin
ErrCode:= CopiarDocumentos(NuevaRuta,AnsiReplaceStr(NuevaRuta,ExtractFileExt(NuevaRuta),
FormatDateTime('_ddmmy yyy_hhnnss',Now)+ExtractFileExt(NuevaRuta)));
if ErrCode <> 0 then hLog('No se pudo respaldar la version del archivo. ('+NuevaRuta+
')('+IntToStr(ErrCode)+')');
end;
ErrCode:= CopiarDocumentos(PChar(Listado[i]),NuevaRuta);
if ErrCode <> 0 then
hLog('No se pudo transferir el archivo al servidor de almacenamiento. ('+NuevaRuta+
')('+IntToStr(ErrCode)+')')
else
begin
if DBConectada then
RegistrarActividad(26,-1,GetPCName,MidStr(ExtractFileName(NuevaRuta),1,30));
ListadoEliminar.Add(Listado[i]);
end;
end;
XDel(Handle,ListadoEliminar);
StatusBar.Panels.Items[2].Text:= '';
except
on E: Exception do
begin
StatusBar.Panels.Items[2].Text:= '';
hLog('Error al transferir los documentos al servidor de almacenamiento.('+E.Message+')');
end;
end;
finally
ErrCode := WNetCancelConnection2(vRuta, CONNECT_UPDATE_PROFILE, True);
Listado.Free;
ListadoEliminar.Free;
end;
end;
end;
Saludos.