PDA

Ver la Versión Completa : ejecutar aplicacion desde delphi como otro usuario


aram2r
31-05-2004, 09:45:22
Hola amigos mi duda existencial en estos momentos es como ejecuta una aplicacion desde delphi, yo lo hago con WinExec(), pero necesito ejecutarlo con un usuario distinto....osea me explico: Estoy en Win2000 y quiero ejecutar una instalacion de un programa desde delphi pero necesito permisos........desde windows se soluciona con "Ejecutar como" pero dsd delphi no tengo ni idea de como pasarle q lo quiero ejecutar con otro usuario....Podeis ayudarme? Gracias.

CHiCoLiTa
31-05-2004, 11:31:17
Echale un ojo a este hilo a ver si sacas algo en claro run as (http://www.clubdelphi.com/foros/showthread.php?t=9316)

aram2r
01-06-2004, 10:49:54
Gracias ...le he exado un vistazo pero no he consegido sacar muxo en claro.....esq no encuentro una buena ayuda para CreateProcessAs....

asirvent
03-06-2004, 10:36:12
Creo q es esto lo q andas buscando:

//////////////////////////////////////////////////////////////////////

unit principal;

interface

uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;


const
LOGON_WITH_PROFILE = 1;
LOGON_NETCREDENTIALS_ONLY = 2;

function CreateProcessWithLogon(
lpUsername: PWChar;
lpDomain: PWChar;
lpPassword: PWChar;
dwLogonFlags: DWORD;
lpApplicationName: PWChar;
lpCommandLine: PWChar;
dwCreationFlags: DWORD;
lpEnvironment: Pointer;
lpCurrentDirectory: PWChar;
const lpStartupInfo: TStartupInfo;
var lpProcessInfo: TProcessInformation
): BOOL; stdcall;


type
TForm1 = class(TForm)
Label3: TLabel;
Label5: TLabel;
b_ejecutar: TRxSpeedButton;
b_acercade: TRxSpeedButton;
b_cerrar: TRxSpeedButton;
Label6: TLabel;
open: TOpenDialog;
aplicacion: TEdit;
RxSpeedButton1: TRxSpeedButton;
procedure Button1Click(Sender: TObject);
private
public
end;

var
Form1: TForm1;

implementation

{$R *.dfm}

uses funciones,acercade;

function CreateProcessWithLogon; external advapi32 name 'CreateProcessWithLogonW';

procedure TForm1.Button1Click(Sender: TObject);
var
wUsername, wDomain, wPassword, wApplicationName: WideString;
pwUsername, pwDomain, pwPassword, pwApplicationName: PWideChar;
StartupInfo: TStartupInfo;
ProcessInfo: TProcessInformation;
begin
wUsername := 'USUARIO';
wDomain := 'DOMINIO';
wPassword := 'CLAVE';
wApplicationName := aplicacion.text;
pwUsername := Addr(wUsername[1]);
pwDomain := Addr(wDomain[1]);
pwPassword := Addr(wPassword[1]);
pwApplicationName := Addr(wApplicationName[1]);

FillChar(StartupInfo, SizeOf(TStartupInfo), 0);
StartupInfo.cb := SizeOf(TStartupInfo);
if not CreateProcessWithLogon(pwUsername,pwDomain,pwPassword,LOGON_WITH_PROFILE,
pwApplicationName,nil,CREATE_DEFAULT_ERROR_MODE,
nil,nil,StartupInfo,ProcessInfo) then
RaiseLastOSError;
end;

//////////////////////////////////////////////////////////////////////

Con esto podras ejecutar aplicaciones utilizando permisos de otros usuarios.

un saludo