Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   Insertar credencial de unidad de red (https://www.clubdelphi.com/foros/showthread.php?t=89693)

noobdelphi5 19-01-2016 01:42:39

Insertar credencial de unidad de red
 
Buenas Tardes,

Uso Delphi 7 y mi servicio se usará en win XP, vista, 7 y 8.
Tengo un problema con este procedure sirve perfectamente si lo corro con un botón, pero al momento de correrlo como un servicio de windows me abre el cmd pero no borra la unidad, ni inserta la credencial de la unidad de red.
A continuación pegó mi código:

Código Delphi [-]
procedure loginRed(cmdUnidad, cmdusuario, cmdPass, cmdRuta, cmdVentana: String; cmdTiempo: Integer; cmdError: Boolean);
var
  conectar: String;
  opcion: Cardinal;
begin
  opcion:=SW_HIDE;
  case AnsiIndexStr(cmdVentana,['oculta', 'visible']) of
    0 : opcion:=SW_HIDE;
    1 : opcion:=SW_SHOW;
  end;
  conectar:='net use '+cmdUnidad+' '+cmdRuta+' /user:'+cmdUsuario+' '+cmdpass;
  WinExec(PChar('net use '+cmdUnidad+' /del /yes'), opcion);
  sleep(cmdTiempo);
  if cmdError=True Then
  begin
    ShowMessage(SysErrorMessage(GetLastError));
  end;
  WinExec(PChar(conectar), opcion);
  sleep(cmdTiempo);
  if cmdError=True Then
  begin
    ShowMessage(SysErrorMessage(GetLastError));
  end;
end;

¿Es posible hacer esto cómo servicio?, Necesito su ayuda, ya lo intente sigo sin resultados.
Otra pregunta, ¿Para atrapar la pantalla de cmd como le puedo hacer?, porque SysErrorMessage(GetLastError) no arroja el error al no poder conectar a la unidad de red, solo aparece "La operación se ha completado correctamente".

noobdelphi5 19-01-2016 20:26:19

Encontré esta función para conectar unidades de red la utilizo después de borrar la unidad anterior con

Código Delphi [-]
WNetCancelConnection(PChar(unidad),True);

Pero igualmente me corre si la ejecuto con botón pero no corre en un servicio, la función:

Código Delphi [-]
function ConnectShare(Drive, RemotePath, UserName, Password : String):Integer;
var
  NRW : TNetResource;
begin
  with NRW do
  begin
    dwType := RESOURCETYPE_ANY;
    if Drive <> '' then
      lpLocalName := PChar(Drive)
    else
      lpLocalName := nil;
      lpRemoteName := PChar(RemotePath);
      lpProvider := '';
  end;
  Result := WNetAddConnection2(NRW, PChar(Password), PChar(UserName), 0);
end;

function DisconnectShare(Drive : String):Integer;
begin
  Result := WNetCancelConnection2(PChar(Drive), 0, false);
end;

El resultado que me devuelve cuando se ejecuta es 1312:

ERROR_NO_SUCH_LOGON_SESSION
1312 (0x520)
A specified logon session does not exist. It may already have been terminated.

noobdelphi5 20-01-2016 01:32:45

Solución
 
Después de varios intentos lo conseguí con este código, lo publico por si alguien tiene el mismo problema.

Código Delphi [-]
procedure Conect;
var
  NetResource: TNETRESOURCE;
begin
  ZeroMemory(@NetResource, sizeof(TNETRESOURCE));
  NetResource.dwType:= RESOURCETYPE_ANY;
  NetResource.lpLocalName:= 'Z:';
  NetResource.lpRemoteName:= '\\ruta';  // Ruta del recurso compartido en PC remoto
  NetResource.lpProvider:= '';

  if NO_ERROR <> WNetAddConnection2(NetResource, 'PassWord', 'UserName', CONNECT_UPDATE_PROFILE) then
  begin
    // Lo que quieras hacer en tu recurso
  end;
  WNetCancelConnection2('Z:', CONNECT_UPDATE_PROFILE, true); // Cerramos y nos vamos
end;


La franja horaria es GMT +2. Ahora son las 08:27:06.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi