Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Varios
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Grupo de Teaming del ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 10-11-2013
camiz camiz is offline
Miembro
 
Registrado: ene 2012
Posts: 69
Poder: 13
camiz Va por buen camino
Aplicacion con derechos de administrador

hola amigos del club, les comento que quiero que mi aplicacion se ejecute con derechos de administrador he encontrado este codigo en en este hilo, de funcionar funciona. pero con un gran problema que al ejecutarse la aplicacion crea un proseso repetitivo reejecutandose infinidad de veces.

lo he probado en mi aplicacion en
ONSHOW
ONCREATE

el mismo problema, alguien que me ayude como utilizarlo.

Código Delphi [-]
uses
  Windows,  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;

Código Delphi [-]
begin
   RunAsAdmin('Miprograma.exe');
end.
Responder Con Cita
  #2  
Antiguo 11-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
camiz,

Cita:
Empezado por camiz
...este código...al ejecutarse la aplicación crea un proceso repetitivo...ejecutándose infinidad de veces...
Te comento: El código señalado en el Msg #1 no controla el número de instancias de una aplicación, solo permite ejecutar la misma con privilegios de administrador en Windows.

Revisa este código:
Código Delphi [-]
unit Unit1;

interface

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

type
  TForm1 = class(TForm)
    Button1: TButton;
    Button2: TButton;
    procedure Button1Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;
  CurrentSemafor : THandle;

implementation

{$R *.dfm}

// Ejecuta una aplicación con derechos de administrador en Windows
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;

// Verifica si esta activa una instancia de la aplicación por medio de un Semáforo de Control
function CheckInstance(AppName : String) : Boolean;
var
   Semafor : THandle;
begin

   Semafor := CreateSemaphore(nil, 0, 1, PChar(AppName));
   if (Semafor <> 0) and (GetLastError = ERROR_ALREADY_EXISTS) then
   begin
      CloseHandle(Semafor);
      Result := False;
      Exit;
   end
   else
   begin
      CurrentSemafor := Semafor;
      Result := True;
   end;

end;

// Ejecuta una sola instancia de la aplicación con derechos de administrador por medio de un Semáforo de Control
procedure TForm1.Button1Click(Sender: TObject);
begin
   if CheckInstance('Calc') then
      RunAsAdmin('Calc.exe')
   else
      MessageDlg('La Aplicación ya esta Activa en Memoria',mtInformation,[mbOK],0)
end;

// Libera el Semáforo de Control para Permitir otra Instancia de la Aplicación
procedure TForm1.Button2Click(Sender: TObject);
begin
   CloseHandle(CurrentSemafor);
end;

end.
El código anterior permite ejecutar una única instancia de una aplicación con derechos de administrador en Windows mientras este activo un semáforo de control definido por medio de un string que identifica a la misma.

Revisa estos links:
Cita:
1- Evitar múltiples instancias de nuestra aplicación : http://clubdelphi.com/foros/showthread.php?t=80901

2- Controlling the number of application instances : http://delphi.about.com/od/windowssh.../aa100703a.htm

3- TInstanceControl : http://delphi.about.com/library/weekly/aa110203a.htm

4- CreateSemaphore function : http://msdn.microsoft.com/en-us/libr...=vs.85%29.aspx
Espero sea útil

Nelson.

Última edición por nlsgarcia fecha: 11-11-2013 a las 04:38:12.
Responder Con Cita
  #3  
Antiguo 11-11-2013
camiz camiz is offline
Miembro
 
Registrado: ene 2012
Posts: 69
Poder: 13
camiz Va por buen camino
Solucionado

Gracias nelson por tu aporte, excelente tu aporte.
quisiera compartir otra forma de hacer que nuestra aplicacion se inicie como administrador ya lo he comprobado y funciona al 100%.
está en portugues solo hay que traducir y seguir al pie de la letra Clic aqui.
Responder Con Cita
  #4  
Antiguo 03-09-2016
dardusso23 dardusso23 is offline
Miembro
NULL
 
Registrado: jun 2016
Posts: 37
Poder: 0
dardusso23 Va por buen camino
Hola! Yo solo lo que necesito seria un boton que al hacerle click ejecute como admin un programa. He usado el codigo de RunAsAdmin que publicaste pero me da un error de que no puede allar el archivo. Copio como lo hice para ver donde esta el error:

[delphi]
unit Unit1;

interface

uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs,StdCtrls,ShellAPI, sButton;
const
ProgramName = 'MiPrograma.exe';

type
TForm1 = class(TForm)
sButton1: TsButton;
procedure sButton1Click(Sender: TObject);

private

procedure RunAsAdmin( strParameters: String = 'OK'; Handle : HWND = 0);
{ Private declarations }
public
{ Public declarations }
end;

var
Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.RunAsAdmin( strParameters: String;
Handle: HWND);
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';
Info.lpFile := PChar(ProgramName);
Info.lpParameters := PChar(strParameters);
Info.nShow := SW_SHOWNORMAL;

if not ShellExecuteEx(@Info) then
RaiseLastOSError;
end;

procedure TForm1.sButton1Click(Sender: TObject);
begin
RunAsAdmin('MiPrograma.exe');
end;

end.

Muchas gracias

Última edición por dardusso23 fecha: 03-09-2016 a las 14:00:37.
Responder Con Cita
  #5  
Antiguo 03-09-2016
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.040
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
Recuerda poner los tags al código fuente, ejemplo:



Gracias
Responder Con Cita
  #6  
Antiguo 03-09-2016
Avatar de escafandra
[escafandra] escafandra is offline
Miembro Premium
 
Registrado: nov 2007
Posts: 2.197
Poder: 20
escafandra Tiene un aura espectacularescafandra Tiene un aura espectacular
Código Delphi [-]
ProgramName = 'MiPrograma.exe';

¿Cual es 'MiPrograma.exe'? ¿Existe?


Saludos.
Responder Con Cita
  #7  
Antiguo 03-09-2016
Avatar de AgustinOrtu
[AgustinOrtu] AgustinOrtu is offline
Miembro Premium
NULL
 
Registrado: ago 2013
Ubicación: Argentina
Posts: 1.858
Poder: 15
AgustinOrtu Es un diamante en brutoAgustinOrtu Es un diamante en brutoAgustinOrtu Es un diamante en brutoAgustinOrtu Es un diamante en bruto
Pasale como parametro la ruta completa al ejecutable

PD: Por que defines la constante pero despues usas un literal?
Responder Con Cita
  #8  
Antiguo 05-09-2016
dardusso23 dardusso23 is offline
Miembro
NULL
 
Registrado: jun 2016
Posts: 37
Poder: 0
dardusso23 Va por buen camino
Con la ruta completa funciona. El problema es que me abre la ventana de ejecutar como y ahi hay que seleccionar usuario o administrador y tipear la contraseña. Yo lo que necesito es justamente esquivar esa parte, que el usuario tenga que poner el pass, o sea que el programa ya se eejecute con esos permisos sin pedir autorizacion o contraseña. Se entiende?
Gracias
Responder Con Cita
  #9  
Antiguo 05-09-2016
Avatar de escafandra
[escafandra] escafandra is offline
Miembro Premium
 
Registrado: nov 2007
Posts: 2.197
Poder: 20
escafandra Tiene un aura espectacularescafandra Tiene un aura espectacular
Eso se puede hacer siempre y cuando sepas ese usuario y contraseña.


Saludos
Responder Con Cita
  #10  
Antiguo 05-09-2016
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.040
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
je, je, je...
Responder Con Cita
  #11  
Antiguo 05-09-2016
Avatar de escafandra
[escafandra] escafandra is offline
Miembro Premium
 
Registrado: nov 2007
Posts: 2.197
Poder: 20
escafandra Tiene un aura espectacularescafandra Tiene un aura espectacular
En el supuesto de que conozcas el usuario y contraseña administrador, puedes usar este código o su traducción a delphi, aquí.


Saludos.
Responder Con Cita
  #12  
Antiguo 06-09-2016
Avatar de escafandra
[escafandra] escafandra is offline
Miembro Premium
 
Registrado: nov 2007
Posts: 2.197
Poder: 20
escafandra Tiene un aura espectacularescafandra Tiene un aura espectacular
Y si te interesa más información y elevar el procedimiento a cualquier usuario, incluido System y lanzar procedimientos desde System como un usuario con sesión activa: MiniExecuteAs una pequeña aplicación



Saludos.
Responder Con Cita
  #13  
Antiguo 06-09-2016
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.040
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
Muy interesante
Responder Con Cita
Respuesta



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
Auto Borrar Aplicacion / Cambiar Privilegios Aplicacion / Ejecutar como Administrador jogagua Varios 15 27-10-2011 01:38:07
Obligar ejecucion como Administrador de mi aplicacion aram2r Varios 6 06-04-2011 21:02:35
Derechos de administrador w_mathesius Varios 4 04-01-2009 20:16:50
Aplicación con privilegios de administrador vtorres Varios 8 07-11-2008 16:59:38
Dar privilegios de Administrador a la Aplicación PoZi API de Windows 16 26-04-2006 20:17:52


La franja horaria es GMT +2. Ahora son las 19:44:58.


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