Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Varios
Registrarse FAQ Miembros Calendario Guía de estilo Buscar Temas de Hoy Marcar Foros Como Leídos

Grupo de Teaming del ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 11-07-2013
Caroso Caroso is offline
Miembro
NULL
 
Registrado: jul 2013
Posts: 44
Poder: 0
Caroso Va por buen camino
Question Ejecutar aplicacion como administrador en windows 7

Hola muchachos del foro... nuevamente recurro a ustedes.

Quería saber si alguno de ustedes sabia como hacer, por medio de código, que mi aplicación en Delphi se ejecute como administrador, es decir, que al correr mi aplicación automáticamente tengo privilegios de administrador.

Desde ya muchas gracias.

PD:\ necesito definir esto debido a que debo escribir en la carpeta C:\windows, en un sistema operativo Windows 7...
Responder Con Cita
  #2  
Antiguo 11-07-2013
Avatar de nlsgarcia
[nlsgarcia] nlsgarcia is offline
Miembro Premium
 
Registrado: feb 2007
Ubicación: Caracas, Venezuela
Posts: 2.206
Poder: 21
nlsgarcia Tiene un aura espectacularnlsgarcia Tiene un aura espectacular
Caroso,

Cita:
Empezado por Caroso
...como hacer, por medio de código, que mi aplicación en Delphi se ejecute como administrador...
Revisa este código:
Código Delphi [-]
program Project1;

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

{$R *.res}

procedure RunAsAdmin(const ProgramName: String; const Parameters: String = ''; Handle : HWND = 0);
var
   Info : TShellExecuteInfo;

begin

   FillChar(Info, SizeOf(Info), 0);

   Info.cbSize := SizeOf(Info);
   Info.Wnd := Handle;
   Info.fMask := SEE_MASK_FLAG_DDEWAIT or SEE_MASK_FLAG_NO_UI;
   Info.lpVerb := 'runas'; // Eleva los privilegios de ejecución a Administrador
   Info.lpFile := PChar(ProgramName);
   Info.lpParameters := PChar(Parameters);
   Info.nShow := SW_SHOWNORMAL;

   if not ShellExecuteEx(@Info) then
      RaiseLastOSError;

end;

begin
   RunAsAdmin('XProgram.exe');
end.
El código anterior ejecuta el programa XProgram.exe con privilegios de administrador, en este caso particular no se incluyeron parámetros. En lo referente a tu requerimiento XProgram es tu aplicación en Delphi.

Espero sea útil

Nelson.
Responder Con Cita
  #3  
Antiguo 11-07-2013
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.021
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
Muy buena respuesta.
Responder Con Cita
  #4  
Antiguo 11-07-2013
Caroso Caroso is offline
Miembro
NULL
 
Registrado: jul 2013
Posts: 44
Poder: 0
Caroso Va por buen camino
Smile

Hola nlsgarcia

Muchisimas gracias por tu respuesta, me sirvio muchisimo!!

y como dijo Casimiro Notevi...
Cita:
Empezado por Casimiro Notevi Ver Mensaje
Muy buena respuesta.
Saludos
Responder Con Cita
  #5  
Antiguo 29-11-2013
Avatar de escafandra
[escafandra] escafandra is offline
Miembro Premium
 
Registrado: nov 2007
Posts: 2.195
Poder: 20
escafandra Tiene un aura espectacularescafandra Tiene un aura espectacular
Aunque ya es un poco viejo el tema, quisiera documentarlo un poco más aportando un enlace de este mismo foro en el que se trató en febrero de 2009. En él muestro como hacer un "runas" no solo como administrador, sino como cualquier usuario e identificando el loging por código.

Ejecutar Como en C++



Saludos.
Responder Con Cita
  #6  
Antiguo 30-11-2013
Avatar de nlsgarcia
[nlsgarcia] nlsgarcia is offline
Miembro Premium
 
Registrado: feb 2007
Ubicación: Caracas, Venezuela
Posts: 2.206
Poder: 21
nlsgarcia Tiene un aura espectacularnlsgarcia Tiene un aura espectacular
Club Delphi,

Cita:
Empezado por escafandra
...como hacer un "RunAs" no solo como administrador, sino como cualquier usuario...
Esta es la implementación en Delphi del código sugerido en el Msg #5:
Código Delphi [-]
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.dll';

function RunAs(const UserName, Domain, Password, PrgName, CmdLine : PWideChar; Wait : Boolean) : Boolean;

var
   StrInf : TStartupInfo;
   PrcInf : TProcessInformation;

begin

   FillChar(StrInf,SizeOf(TStartupInfo),0);
   FillChar(PrcInf,SizeOf(TProcessInformation),0);
   StrInf.cb := SizeOf(TStartupInfo);
   StrInf.wShowWindow := SW_SHOWNORMAL;

   Result := CreateProcessWithLogonW(UserName,
                                     Domain,
                                     Password,
                                     1, 
                                     PrgName,
                                     CmdLine,
                                     0,
                                     nil,
                                     nil,
                                     StrInf,
                                     PrcInf);

   if Result then
   begin
      if Wait then WaitForSingleObject(PrcInf.hProcess, INFINITE);
      CloseHandle(PrcInf.hProcess);
      CloseHandle(PrcInf.hThread);
   end
   else
      MessageDlg(SysErrorMessage(GetLastError),mtError,[mbOK],0);

end;
El código anterior permite ejecutar un proceso con el usuario, password y dominio requerido con un switch de control de espera de terminación de proceso.

Un ejemplo de su uso:
Código Delphi [-]
procedure TForm1.Button1Click(Sender: TObject);
begin
   RunAs('UserName','Dominio','Password','cmd.exe','/k dir c:\', True);
end;
El código anterior inicia el shell de Windows y ejecuta el comando dir con la opción /k (Ejecutar un cmd y mantener abierto el shell) esperando que el proceso finalize (Cerrar el Shell) por medio del switch en True.

Revisen estos links:
Cita:
CreateProcessWithLogonW function : http://msdn.microsoft.com/en-us/libr...=vs.85%29.aspx

Aplicacion con derechos de administrador : http://www.clubdelphi.com/foros/showthread.php?t=84603
Espero sea útil

Nelson.

Última edición por nlsgarcia fecha: 30-11-2013 a las 06:10:08.
Responder Con Cita
Respuesta


Herramientas Buscar en Tema
Buscar en Tema:

Búsqueda Avanzada
Desplegado

Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
Ejecutar Como administrador una aplicacion desde otra mia phyrian API de Windows 1 06-03-2012 08:54:18
Auto Borrar Aplicacion / Cambiar Privilegios Aplicacion / Ejecutar como Administrador jogagua Varios 15 27-10-2011 02:38:07
Obligar ejecucion como Administrador de mi aplicacion aram2r Varios 6 06-04-2011 22:02:35
Ejecutar BDE Administrador Colgueit Conexión con bases de datos 4 08-05-2006 19:38:04
Ejecutar aplicación al iniciar Windows nesetru Varios 5 10-02-2004 10:09:56


La franja horaria es GMT +2. Ahora son las 14:33:05.


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
Copyright 1996-2007 Club Delphi