Hola
Una duda que se me presenta:
Usando un codigo que trabaja con un componente he podido hacer que el programa se instale en el startub (inicio) de windows.
Metiéndome (en camisa de once varas) en el msconfig, esta el programa en la ultima paleta (startub).
Es programa lo que usa es la variable (creo que es asi) TRegistry y HKEY_LOCAL_MACHINE.
Pero como dije lo que hace es instalar el programa en el inicio de windows, osea que si algun usuario se loguea, el programa arrancara independientemente del que sea.
Bueno, mi duda:
El ordenador que tengo lo uso de servidor, osea no se loguea nadie.
Cuando arranca simplemente se queda asi y se puede acceder a el desde la red.
Me han dicho que la manera de hacerlo es colocando el programa como un servicio.
Pregunto:
Para colocar el programa como un servicio se puede hacer como con este (TRegistry).?
Se usa el mismo pero de otra manera?
Hay otra forma de hacer que sea servicio?.
Por favor me ayudáis.
Saludos
Este es el componente:
Código Delphi
[-]
unit BootExec;
interface
uses
Classes,Windows,SysUtils,Registry;
type
TBootExec = class(TComponent)
Private
NombreClave : String;
NombreExec : String;
ProximaVez : Boolean;
Usuario : Boolean;
Protected
Public
constructor Create(AOwner: TComponent); override;
function AppInReg : Boolean;
function AddAppReg : Boolean;
function DelAppReg : Boolean;
Published
Property NombrePrograma : string
Read NombreClave
Write NombreClave;
Property NombreEjecutable : string
Read NombreExec
Write NombreExec;
Property SoloUnaVez : Boolean
Read ProximaVez
Write ProximaVez;
Property SoloUsuario : Boolean
Read Usuario
Write Usuario;
end;
procedure Register;
implementation
constructor TBootExec.Create(AOwner: TComponent);
begin
Inherited;
AddAppReg;
end;
function TBootExec.AppInReg : Boolean;
var
Reg : TRegistry;
RegInfo : TRegDataInfo;
Clave : String;
Valores : TStringList;
I : Integer;
begin
Result:=False; Clave:='Software\Microsoft\Windows\CurrentVersion\Run';
if ProximaVez then Clave := Clave+'Once';
Reg:=TRegistry.Create;
if Not(Usuario) then Reg.RootKey := HKEY_LOCAL_MACHINE;
if Not(Reg.KeyExists(Clave)) Then begin
Reg.Free;
Exit;
end;
Reg.OpenKey(Clave,False); Valores := TStringList.Create;
Reg.GetValueNames(Valores); for I:=0 to (Valores.Count-1) do
begin
if Reg.GetDataInfo( Valores[i], RegInfo) then
begin
if (RegInfo.RegData = rdString) then
begin
if Lowercase(NombreExec)=LowerCase( Reg.ReadString(Valores[i]) ) then
begin
Result:=True;
Break;
end;
end;
end
else
Valores[i]:='';
End; Valores.Free;
Reg.Free;
end;
function TBootExec.AddAppReg : Boolean;
var
Reg : TRegistry;
Clave : string;
begin
Result:=False;
if (NombreClave='') or (NombreExec='') then
Exit;
if AppInReg then
Exit;
Clave:='Software\Microsoft\Windows\CurrentVersion\Run';
if ProximaVez then Clave := Clave+'Once';
Reg:=TRegistry.Create;
if Not(Usuario) then Reg.RootKey := HKEY_LOCAL_MACHINE;
if Not(Reg.KeyExists(Clave)) then
begin
Reg.Free;
Exit;
end;
Reg.OpenKey(Clave,False);
Reg.WriteString(NombreClave,NombreExec);
Reg.Free;
Result:=True;
end;
function TBootExec.DelAppReg : Boolean;
var
Reg : TRegistry;
RegInfo : TRegDataInfo;
Clave : string;
Valores : TStringList;
I : integer;
begin
Result:=False;
if Not(AppInReg) then
Exit;
if (NombreClave='') or (NombreExec='') then
Exit;
Clave:='Software\Microsoft\Windows\CurrentVersion\Run';
if ProximaVez then Clave := Clave+'Once';
Reg:=TRegistry.Create;
if Not(Usuario) then Reg.RootKey := HKEY_LOCAL_MACHINE;
if Not(Reg.KeyExists(Clave)) then
begin
Reg.Free;
Exit;
end;
Reg.OpenKey(Clave,False);
Valores := TStringList.Create;
Reg.GetValueNames(Valores); for I:=0 to (Valores.Count-1) do
begin
if Reg.GetDataInfo( Valores[i], RegInfo) then
begin
if (RegInfo.RegData = rdString) then
begin
if Lowercase(NombreExec)=LowerCase( Reg.ReadString(Valores[i]) ) then
begin
Reg.DeleteValue( Valores[i] );
Result:=True;
end;
end;
end;
end;
Valores.Free;
Reg.Free;
end;
procedure Register;
begin
RegisterComponents('LabGalia', [TBootExec]);
end;
END.
Asi grabo:
Código Delphi
[-]
procedure TForm1.Button1Click(Sender: TObject);
begin
BootExec1.NombrePrograma:='Programa Hola';
BootExec1.NombreEjecutable:='C:\Hola\Hola.exe';
BootExec1.SoloUnaVez:=False;
BootExec1.SoloUsuario:=False;
if BootExec1.AddAppReg then
ShowMessage('Ok, se ha instalado correctamente')
else
ShowMessage('NO, Error en la instalación, posiblemente ya esté instalado...');
end;
Y asi lo elimino de windows:
Código Delphi
[-]
procedure TForm1.Button3Click(Sender: TObject);
begin
BootExec1.NombrePrograma:='Programa Hola';
BootExec1.NombreEjecutable:='C:\Hola\Hola.exe';
BootExec1.SoloUnaVez:=False;
BootExec1.SoloUsuario:=False;
if BootExec1.DelAppReg then
ShowMessage('Ok, se ha Desinstalado correctamente')
else
ShowMessage('NO, Error en la Desinstalación, posiblemente ya fuese desinstalado...');
end;