Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   API de Windows (https://www.clubdelphi.com/foros/forumdisplay.php?f=7)
-   -   RunAS (https://www.clubdelphi.com/foros/showthread.php?t=53426)

Irma 20-02-2008 18:13:02

RunAS
 
Hola a todos, necesito instalar un exe con permisos de administrados, al utilizar runas me funciona todo bien, pero no quiero q me solicite password, este debe ser transparente.

Les agradeciaria me ayudaran

ixMike 20-02-2008 18:21:10

Cita:

Empezado por Irma (Mensaje 267302)
pero no quiero q me solicite password

Me parece que así incurriríamos en un fallo de seguridad en el sistema, ¿no?


Salu2.

Irma 20-02-2008 19:03:25

RunAs
 
Gracias ixMike por responderme, disculpa creo que no supe explicarme, al instalar el exe con un usuario sin privilegios de Admin me da error de instalacion (crear un directorio en c:/ y grabar en este el exe). No quiero que estos usuarios restringidos sepan el "password de administrador". Por eso es que lo ejecuto con RunAs.

Utilizo este Codigo

function TForm1.RunExe2(Cmdline: string): boolean;
var
Startupinfo : TStartupinfo;
Processinfo : TProcessinformation;
parametros : String;
begin
Fillchar(Startupinfo,Sizeof(TStartupinfo),0);
with startupinfo do
begin
cb := sizeof(tstartUPinfo);
dwflags := STARTF_USESHOWWINDOW or STARTF_FORCEONFEEDBACK or STARTF_USESTDHANDLES;
WSHOWWINDOW := SW_SHOWNORMAL;
end;
result := CreateProcess(nil,PChar(cmdLine), nil, nil, true,NORMAL_PRIORITY_CLASS,nil, nil, Startupinfo, Processinfo);
if booltostr(result) = '0' then Messagebox(0,pchar(SysErrorMessage(GetLastError)),'Message',MB_ICONERROR);
end;


procedure TForm1.Button1Click(Sender: TObject);
begin
RunExe2('"C:\Windows\System32\RunAs.exe" /env /user:Administrator "C:\Facturacion\ProjectFactura.EXE"');
end;

En este codigo algo no funciona bien ......

cHackAll 20-02-2008 20:40:23

Código Delphi [-]
var
 si: TStartupInfo = (cb: SizeOf(si); dwFlags: STARTF_USESHOWWINDOW or STARTF_FORCEONFEEDBACK; wShowWindow: SW_SHOWNORMAL);
 pi: TProcessInformation;
 
function CreateProcessWithLogonW(lpUsername, lpDomain, lpPassword: PWideChar; dwLogonFlags: Cardinal;
                                 lpApplicationName, lpCommandLine: PWideChar; dwCreationFlags: Cardinal; lpEnvironment: Pointer; lpCurrentDirectory: PWideChar;
                                 var lpStartupInfo: TStartupInfo; var lpProcessInfo: TProcessInformation): LongBool; stdcall; external 'advapi32';
 
procedure TForm1.Button1Click(Sender: TObject);
begin
 if not CreateProcessWithLogonW('Administrator', nil, '123456', 1, nil, 'cmd', 0, nil, nil, si, pi) then
  ShowMessage(SysErrorMessage(GetLastError));
end;

PD: no se por que usas STARTF_USESTDHANDLES si no estas definiendo hStdInput, hStdOutput, ó hStdError, y hasta STARTF_USESHOWWINDOW me suena innecesario pues de todas formas estas usando su Default.

Usa las etiquetas para poner tu código!!!

Saludos

Irma 20-02-2008 21:49:29

Al instalar ProjectFactura.EXE en las Pc's, no tengo conocimiento de cual el password del usuario Administrador.

jachguate 20-02-2008 22:47:15

Podes incluir una configuración donde se guarde... aunque eso de guardar la contraseña del administrador no es nada sano.

Finalmente... si el programa requiere permisos de administrador para ejecutarse... pues quien lo haga debiera llamar al administrador cada vez... ¿no te parece?

Hasta luego.

;)

delphi.com.ar 21-02-2008 19:27:38

Te recomiendo ver la función RunAs que he subido al foro hace tiempo, con esta función no sería necesario utilizar la consola para crear procesos con otro usuario ya que utliza la función CreateProcessAsUser.

Saludos!

alquimista 24-02-2008 23:58:37

¿con RunAs es necesario ejecutar tu exe a través de un loader o launcher? ¿es posible que una aplicación se ejecute con privilegios de admin con su propio código?

con respecto a que no se vea la pass de admin se podría pasar encriptada ,no?

jachguate 25-02-2008 16:00:10

Cita:

Empezado por alquimista (Mensaje 268359)
¿es posible que una aplicación se ejecute con privilegios de admin con su propio código?

Lo que se me ocurre es que tu aplicación haga algo como esto:


Código:

  if NoEsAdministrador then
  begin
    RunAs(YoMismo, Administrador, contraseña);
    Terminar;
  end;

Hasta luego.

;)

alquimista 04-03-2008 02:06:22

no entiendo ese código.

Yomismo se refiere a un exe o a que?

Puedes ser mas claro por favor.

jachguate 04-03-2008 02:22:06

Por YoMismo quise decir, la propia aplicación...

Para ser mas formales:

Código Delphi [-]
  if not UsuarioAdministrador() then
  begin
    RunAs(Application.ExeName, FUsuarioAdministrador, FPasswordAdministrador);
    Application.Terminate();
  end;

¿es lo suficientemente claro ahora?

alquimista 06-03-2008 20:06:23

Luego debes de crear una aplicación A que ejecute a la aplicación B que es la que queremos que tenga privilegios de admin
.
Mi pregunta era si B puede iniciarse a ella misma con un proceso RunAs pero desde su propio código?

Código:

Programa B.exe
...
if not admin then
  EjecutateComoAdmin(B.EXE,etc..)
...
end.

Esto es posible??

jachguate 07-03-2008 02:28:50

Cita:

Empezado por alquimista (Mensaje 271294)
Mi pregunta era si B puede iniciarse a ella misma con un proceso RunAs pero desde su propio código?

Código:

Programa B.exe
...
if not admin then
  EjecutateComoAdmin(B.EXE,etc..)
...
end.


Es justamente lo que hace el trozo de código que te envié... :rolleyes::rolleyes:

alquimista 25-03-2008 17:52:59

Bueno he hecho pruebas con el RunAs
y me da un error de excepción Code 1314
EOSError Code:_1314.
"El cliente no dispone de un privilegio requerido."

en una cuenta de administrador en XP SP2 dentro de la función RunAs
Código:

procedure TForm6.BitBtn1Click(Sender: TObject);
begin

  RunAs(PChar(Application.ExeName),PChar(Edit2.text) ,(*PChar(Edit4.text)*)nil , PChar(Edit3.text));
  try
  ListBox1.Items.SaveToFile('prueba.txt');
  except
  Edit1.text:='error';
  end;
end;

Alguna sugerencia.
He puesto el user y password en editbox y el dominio como nil (ordenador sin dominio, supongo)
Si se deben cambiar privilegios
¿Cuales son?
¿Se puede hacer todo desde Delphi de manera automática?


La franja horaria es GMT +2. Ahora son las 23:36:12.

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