Author: amunger Date: Tue Oct 3 02:21:37 2006 New Revision: 24371
URL: http://svn.reactos.org/svn/reactos?rev=24371&view=rev Log: Patch from ShadowFlare, bug 1838.
"The current implementation continues to register or unregister additional DLLs that were specified, even if one of the earlier ones failed. The behavior on the Microsoft version is different; if one fails, it stops there instead of continuing. Some installers may possibly depend on this behavior."
Modified: trunk/reactos/base/system/regsvr32/regsvr32.c
Modified: trunk/reactos/base/system/regsvr32/regsvr32.c URL: http://svn.reactos.org/svn/reactos/trunk/reactos/base/system/regsvr32/regsvr... ============================================================================== --- trunk/reactos/base/system/regsvr32/regsvr32.c (original) +++ trunk/reactos/base/system/regsvr32/regsvr32.c Tue Oct 3 02:21:37 2006 @@ -1,10 +1,10 @@ /* * ReactOS regsvr32 - * Copyright (C) 2004 ReactOS Team + * Copyright (C) 2004-2006 ReactOS Team * * COPYRIGHT: See COPYING in the top level directory * PROJECT: ReactOS regsvr32.exe - * FILE: apps/utils/regsvr32/regsvr32.c + * FILE: base/system/regsvr32/regsvr32.c * PURPOSE: Register a COM component in the registry * PROGRAMMER: ShadowFlare (blakflare@hotmail.com) */ @@ -59,13 +59,13 @@ LPCTSTR ModuleTitle = _T("RegSvr32");
TCHAR UsageMessage[RC_STRING_MAX_SIZE]; -TCHAR NoDllSpecified[RC_STRING_MAX_SIZE]; -TCHAR InvalidFlag[RC_STRING_MAX_SIZE]; -TCHAR SwitchN_NoI[RC_STRING_MAX_SIZE]; +TCHAR NoDllSpecified[RC_STRING_MAX_SIZE]; +TCHAR InvalidFlag[RC_STRING_MAX_SIZE]; +TCHAR SwitchN_NoI[RC_STRING_MAX_SIZE]; TCHAR DllNotLoaded[RC_STRING_MAX_SIZE]; TCHAR MissingEntry[RC_STRING_MAX_SIZE]; -TCHAR FailureMessage[RC_STRING_MAX_SIZE]; -TCHAR SuccessMessage[RC_STRING_MAX_SIZE]; +TCHAR FailureMessage[RC_STRING_MAX_SIZE]; +TCHAR SuccessMessage[RC_STRING_MAX_SIZE];
// The macro CommandLineToArgv maps to a function that converts @@ -271,12 +271,12 @@
// Get Langues msg LoadString( GetModuleHandle(NULL), IDS_UsageMessage, (LPTSTR) UsageMessage,RC_STRING_MAX_SIZE); - LoadString( GetModuleHandle(NULL), IDS_NoDllSpecified, (LPTSTR) NoDllSpecified,RC_STRING_MAX_SIZE); + LoadString( GetModuleHandle(NULL), IDS_NoDllSpecified, (LPTSTR) NoDllSpecified,RC_STRING_MAX_SIZE); LoadString( GetModuleHandle(NULL), IDS_InvalidFlag, (LPTSTR) InvalidFlag,RC_STRING_MAX_SIZE); LoadString( GetModuleHandle(NULL), IDS_SwitchN_NoI, (LPTSTR) SwitchN_NoI,RC_STRING_MAX_SIZE);
- LoadString( GetModuleHandle(NULL), IDS_DllNotLoaded, (LPTSTR) DllNotLoaded,RC_STRING_MAX_SIZE); - LoadString( GetModuleHandle(NULL), IDS_MissingEntry, (LPTSTR) MissingEntry,RC_STRING_MAX_SIZE); + LoadString( GetModuleHandle(NULL), IDS_DllNotLoaded, (LPTSTR) DllNotLoaded,RC_STRING_MAX_SIZE); + LoadString( GetModuleHandle(NULL), IDS_MissingEntry, (LPTSTR) MissingEntry,RC_STRING_MAX_SIZE); LoadString( GetModuleHandle(NULL), IDS_FailureMessage, (LPTSTR) FailureMessage,RC_STRING_MAX_SIZE); LoadString( GetModuleHandle(NULL), IDS_SuccessMessage, (LPTSTR) SuccessMessage,RC_STRING_MAX_SIZE);
@@ -384,7 +384,7 @@ OleInitialize(0);
// (Un)register every dll whose filename was passed in the command-line string - for (i = 1; i < argc; i++) { + for (i = 1; i < argc && nRetValue == EXITCODE_SUCCESS; i++) { // Arguments that do not start with a slash (/) are filenames if (*argv[i] != _T('/')) { lptDllName = argv[i]; @@ -425,7 +425,7 @@ } }
- if (bInstall) { + if (bInstall && nRetValue == EXITCODE_SUCCESS) { // Get the address of DllInstall fnDllInstall = (DLLINSTALL)GetProcAddress(hDll,szDllInstall); if (fnDllInstall) {