diff --git a/rosapps/regsvr32/makefile b/rosapps/regsvr32/makefile new file mode 100644 index 00000000000..51837729807 --- /dev/null +++ b/rosapps/regsvr32/makefile @@ -0,0 +1,26 @@ +# $Id: makefile,v 1.1 2002/01/07 21:12:10 jfilby Exp $ +# +# Jurgen Van Gael [jurgen.vangael@student.kuleuven.ac.be] +# +# Makefile for ReactOS regsvr32.dll +# + +PATH_TO_TOP = ../.. + +TARGET_NORC = yes + +TARGET_TYPE = program + +TARGET_APPTYPE = console + +TARGET_NAME = regsvr32 + +TARGET_SDKLIBS = kernel32.a + +TARGET_OBJECTS = $(TARGET_NAME).o + +include $(PATH_TO_TOP)/rules.mak + +include $(TOOLS_PATH)/helper.mk + +# EOF diff --git a/rosapps/regsvr32/regsvr32.c b/rosapps/regsvr32/regsvr32.c new file mode 100644 index 00000000000..bdf570a78ff --- /dev/null +++ b/rosapps/regsvr32/regsvr32.c @@ -0,0 +1,172 @@ +/* + * COPYRIGHT: See COPYING in the top level directory + * PROJECT: ReactOS + * FILE: apps\regsvr32\regsvr32.c + * PURPOSE: Register a COM component in the registry + * PROGRAMMER: jurgen van gael [jurgen.vangael@student.kuleuven.ac.be] + * UPDATE HISTORY: + * Created 31/12/2001 + */ +/******************************************************************** + + +This library is free software; you can redistribute it and/or +modify it under the terms of the GNU Library General Public License as +published by the Free Software Foundation; either version 2 of the +License, or (at your option) any later version. + +This library is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +Library General Public License for more details. + +You should have received a copy of the GNU Library General Public +License along with this library; see the file COPYING.LIB. If +not, write to the Free Software Foundation, Inc., 675 Mass Ave, +Cambridge, MA 02139, USA. + + +********************************************************************/ +// +// regsvr32 [/u] [/s] [/n] [/i[:cmdline]] dllname +// [/u] unregister server +// [/s] silent (no message boxes) +// [/i] Call DllInstall passing it an optional [cmdline]; when used with /u calls dll uninstall +// [/n] Do not call DllRegisterServer; this option must be used with [/i] +// +#include +#include +#include + +typedef HRESULT (*DLLREGISTER) (void); +typedef HRESULT (*DLLUNREGISTER) (void); + +int Silent = 0; + +int Usage() +{ + printf("regsvr32 [/u] [/s] [/n] [/i[:cmdline]] dllname\n"); + printf("\t[/u] unregister server\n"); + printf("\t[/s] silent (no message boxes)\n"); + printf("\t[/i] Call DllInstall passing it an optional [cmdline]; when used with /u calls dll uninstall\n"); + printf("\t[/n] Do not call DllRegisterServer; this option must be used with [/i]\n"); + + return 0; +} + +int RegisterDll(char* strDll) +{ + HRESULT hr = S_OK; + DLLREGISTER pfRegister; + HMODULE DllHandle = NULL; + + DllHandle = LoadLibrary(strDll); + if(!DllHandle) + { + if(!Silent) + printf("Dll not found\n"); + + return -1; + } + pfRegister = (VOID*) GetProcAddress(DllHandle, "DllRegisterServer"); + if(!pfRegister) + { + if(!Silent) + printf("DllRegisterServer not implemented\n"); + + return -1; + } + hr = pfRegister(); + if(FAILED(hr)) + { + if(!Silent) + printf("Failed to register dll\n"); + + return -1; + } + if(!Silent) + printf("Succesfully registered dll\n"); + + // clean + if(DllHandle) + FreeLibrary(DllHandle); +} + +int UnregisterDll(char* strDll) +{ + HRESULT hr = S_OK; + HMODULE DllHandle = NULL; + DLLUNREGISTER pfUnregister; + + DllHandle = LoadLibrary(strDll); + if(!DllHandle) + { + if(!Silent) + printf("Dll not found\n"); + + return -1; + } + pfUnregister = (VOID*) GetProcAddress(DllHandle, "DllUnregisterServer"); + if(!pfUnregister) + { + if(!Silent) + printf("DllUnregisterServer not implemented\n"); + + return -1; + } + hr = pfUnregister(); + if(FAILED(hr)) + { + if(!Silent) + printf("Failed to unregister dll\n"); + + return -1; + } + if(!Silent) + printf("Succesfully unregistered dll\n"); + + // clean + if(DllHandle) + FreeLibrary(DllHandle); +} + +int main(int argc, char* argv[]) +{ + int i = 0; + int Unregister = 0; + char DllName[MAX_PATH]; + + DllName[0] = '\0'; + + for(i = 0; i < argc; i++) + { + if(argv[i][0] == '/') + { + if(argv[i][1] == 'u') + Unregister = 1; + else if(argv[i][1] == 's') + Silent = 1; + else if(argv[i][1] == 'i') + ; // not implemented yet + else if(argv[i][1] == 'n') + ; // not implemented yet + } + else + strcpy(DllName, argv[i]); + } + + if(!strcmp(DllName, "regsvr32") || !strcmp(DllName, "regsvr32.exe")) + { + if(!Silent) + return Usage(); + else + return -1; + } + + if(Unregister == 0) + return RegisterDll(DllName); + else + return UnregisterDll(DllName); + + return 0; +}