From 2167cc7a6198fd88c302078e4f632baebbd87b51 Mon Sep 17 00:00:00 2001 From: Andrew Munger Date: Mon, 2 Oct 2006 22:21:37 +0000 Subject: [PATCH] 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." svn path=/trunk/; revision=24371 --- reactos/base/system/regsvr32/regsvr32.c | 24 ++++++++++++------------ 1 file changed, 12 insertions(+), 12 deletions(-) diff --git a/reactos/base/system/regsvr32/regsvr32.c b/reactos/base/system/regsvr32/regsvr32.c index 096f8328bd1..f0f9dd489b6 100644 --- a/reactos/base/system/regsvr32/regsvr32.c +++ b/reactos/base/system/regsvr32/regsvr32.c @@ -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 @@ LPCWSTR tszDllInstall = L"DllInstall"; 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 @@ int WINAPI WinMain( // 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 @@ int WINAPI WinMain( 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 @@ int WINAPI WinMain( } } - if (bInstall) { + if (bInstall && nRetValue == EXITCODE_SUCCESS) { // Get the address of DllInstall fnDllInstall = (DLLINSTALL)GetProcAddress(hDll,szDllInstall); if (fnDllInstall) {