1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103
|
//******************************************************************************
//*** Eric Boisvert
//*** 30 Juin 2005
//***
//*** Remplacement de regsvr32.exe de windows pour les enregistrer les
//*** OLE components.
//*** // /u pour unregister components dll/ocx ou ActiveX EXE
//*** exemple d'appel:
//*** RegSvr32( 'c:\winnt\system32\mydll.dll') --> Register mydll.dll
//*** RegSvr32( 'c:\winnt\system32\mydll.dll','/u') --> UnRegister mydll.dll
//*** Note: '/s' est toujours implicite!
//*** '/i' Non supporté
//*** '/n' Non supporté
//*** Retourne TRUE si tout c'est bien passé.
//******************************************************************************
unit _Regsrv32;
interface
uses
Sysutils,Windows,shellapi;
// Attente maximum de 20 sec pour enregistrer la dll
Const
MaxTimeWait = 20000;
function Regsvr32(FullFilePath:string;Option:string=''):Boolean;
implementation
function Regsvr32(FullFilePath:string;Option:string=''):Boolean;
var
hLib:HMODULE;
ProcAdr:FARPROC;
IDThread:Cardinal;
DllTread:THandle;
StrFileExt:string;
begin
//resultat pessimiste...
Regsvr32:=FALSE;
//Verification de l'existance de la dll
if FileExists(FullFilePath)=FALSE then exit;
StrFileExt:=UpperCase(ExtractFileExt(FullFilePath));
Option:=UpperCase(Option);
if ( (StrFileExt='.DLL') or (StrFileExt='.OCX') )then
begin
hLib := LoadLibrary(PChar(FullFilePath));
if hLib<>NULL then
begin
ProcAdr:=nil;
if Option='' then
begin
ProcAdr:= GetProcAddress(hLib, 'DllRegisterServer')
end;
if Pos('/U',Option)<>0 then
begin
ProcAdr:= GetProcAddress(hLib, 'DllUnRegisterServer')
end;
if ProcAdr<>nil then
begin
DllTread:=CreateThread(nil,0,ProcAdr,nil,0,IDThread);
if DllTread<>null then
begin
//*** Now wait some time...
if WaitForSingleObject(DllTread, MaxTimeWait)=0 then
begin
Regsvr32:=TRUE;
end;
CloseHandle(DllTread)
end;
end
else
begin
Regsvr32:=TRUE;
end;
FreeLibrary(hLib)
end;
end
else
begin
if (StrFileExt='.EXE') then
begin
if Option='' then
begin
//*** Register ActiveX control
ShellExecute(GetTopWindow(NULL),'open', PChar(FullFilePath),' /REGSERVER', nil, SW_HIDE)
end;
if pos('/U',Option)<>0 then
begin
//*** Unregister ActiveX control
ShellExecute(GetTopWindow(NULL),'open', PChar(FullFilePath),' /UNREGSERVER', nil, SW_HIDE);
end;
end;
end;
end;
end. |
Partager