Antes de nada
agradeceros las respuestas y vuestro interés. Os comento, que en el arranque de (Create) la form realizo la creación del semáforo y verifico si existe (Last Errror).
Como de momento no tenia solución simplemente silenciaba el problema capturando el error con try except (Cuestión de estética).
Y si creo que la solución debe estar en la forma de parametrizar la línea de comandos al registrar la extenxión asociada a la aplicación.
En este caso tengo este objeto que utilizo siempre que se crea la form :
Código Delphi
[-]
........
RegistraExtension1.RegistraExt('.PRESUPUESTO',
'Fichero PRESUPUESTO','PRESUPUESTOS',Application.ExeName,0);
..........
El código de la misma es el siguiente (Unidad completa) :
Código Delphi
[-]
unit RegistraAplicacion;
interface
Uses classes, Forms;
Type
TRegistraExtension = class(TComponent)
private
protected
public
procedure RegistraExt(Extension,
Descripcion,
Tipo,
Ejecutable : string;
IndiceIcono: integer);
procedure EliminaExt(Extension,
Tipo : String);
published
end;
procedure Register;
implementation
Uses Registry, Windows, ShlObj, SysUtils;
procedure Register;
begin
RegisterComponents('UTIL', [TRegistraExtension]);
end;
procedure TRegistraExtension.EliminaExt(Extension, Tipo: String);
Var
Reg :TRegistry;
Begin
Reg := TRegistry.Create;
try
Extension:=AnsiUpperCase(Extension); If Pos('.',Extension)<>1 Then Extension:='.'+Extension; If (Extension='.EXE') Or (Extension='.COM') Or
(Pos('?',Extension)>0) Or (Pos('*',Extension)>0)
Then Extension:=''; If (Extension='') Or (Tipo='') Then Exit; with Reg do
Begin
End;
finally
Reg.Free;
End
end;
procedure TRegistraExtension.RegistraExt(Extension,
Descripcion,
Tipo,
Ejecutable : string;
IndiceIcono: integer);
Var
Reg :TRegistry;
Begin
Reg := TRegistry.Create;
try
Extension:=AnsiUpperCase(Extension); If Pos('.',Extension)<>1 Then Extension:='.'+Extension; If (Extension='.EXE') Or (Extension='.COM') Or
(Pos('?',Extension)>0) Or (Pos('*',Extension)>0)
Then Extension:=''; If Extension='' Then Exit; If Descripcion='' Then Descripcion:=ChangeFileExt(ExtractFileName(Application.ExeName),'');
If (Ejecutable='') Or Not FileExists(Ejecutable) Then
Ejecutable:=Application.ExeName;
If Tipo='' Then Tipo:=Descripcion;
with Reg do
Begin
RootKey := HKEY_CLASSES_ROOT;
OpenKey(Extension, True);
WriteString('', Tipo); CloseKey;
OpenKey(Tipo, True);
WriteString('', Descripcion);
CloseKey;
OpenKey(Tipo+'\DefaultIcon', True);
WriteString('', Ejecutable + ',' + IntToStr(IndiceIcono));
CloseKey;
OpenKey(Tipo+'\Shell\Open', True);
WriteString('', '&Abrir');
CloseKey;
OpenKey(Tipo+'\Shell\Open\Command', True);
WriteString('', '"' + Ejecutable + '" "%1"'); --> CREO KE AKÍ ES DONDE ESTA MAL PARAMETRIZADO
CloseKey;
End;
finally
Reg.Free;
End
End;
end.
Editaré el registro de alguna aplicación (como un editor de textos) y miraré como resuelve el tema paramétrico en
Open. Seguro que ahí tendré la respuesta.
Gracias a tod@s.