home *** CD-ROM | disk | FTP | other *** search
- /*
- * SELFREG.CPP
- * Server Self-Registrtation Utility, Chapter 5
- *
- * Copyright (c)1993-1995 Microsoft Corporation, All Rights Reserved
- *
- * Kraig Brockschmidt, Microsoft
- * Internet : kraigb@microsoft.com
- * Compuserve: >INTERNET:kraigb@microsoft.com
- */
-
-
- #define INITGUIDS
- #include "selfreg.h"
-
-
- /*
- * WinMain
- *
- * Purpose:
- * Main entry point of application.
- */
-
- int PASCAL WinMain(HINSTANCE hInst, HINSTANCE hInstPrev
- , LPSTR pszCmdLine, int nCmdShow)
- {
- BOOL fEXE=FALSE;
- BOOL fUnreg=FALSE;
- LPSTR psz;
- char ch;
-
- /*
- * Walk down the command line looking for /u and /e in
- * any order. The first non-whitespace character after
- * whitespace that is not a "/" is assumed to be the
- * beginning of the server filename. This is all done
- * in ANSI because pszCmdLine is in ANSI.
- */
-
- psz=pszCmdLine;
-
- while (ch=*psz)
- {
- BOOL fStop=FALSE;
-
- switch (ch)
- {
- case '\t':
- case '\n':
- case '\r':
- case ' ':
- //Scan for next non-whitespace and continue
- psz=PszWhiteSpaceScan(psz, TRUE);
- continue;
-
- case '/':
- /*
- * Check what flag this is, then skip to next
- * whitespace.
- */
- ch=*(++psz);
- if ('u'==ch)
- fUnreg=TRUE;
-
- if ('e'==ch)
- fEXE=TRUE;
-
- psz=PszWhiteSpaceScan(psz, FALSE);
- continue;
-
- default:
- fStop=TRUE;
- break;
- }
-
- if (fStop)
- break;
-
- psz++;
- }
-
-
- if (0==ch)
- return 0; //Nothing to do
-
-
- /*
- * Now launch and EXE or load a DLL and tell them to do
- * their registration or unregistartion.
- */
- if (fEXE)
- {
- char szEXE[512];
-
- wsprintfA(szEXE, "%s %s", psz
- , fUnreg ? "/UNREGSERVER" : "/REGSERVER");
- WinExec(szEXE, SW_HIDE);
-
- MessageBoxA(NULL, fUnreg
- ? "EXE unregistration started"
- : "EXE registration started.", "SelfReg", MB_OK);
- }
- else
- {
- HINSTANCE hMod;
-
- //Do this for the sake of DLLs.
- if (FAILED(CoInitialize(NULL)))
- return 0;
-
- hMod=LoadLibraryA(psz);
-
- if (hMod > (HINSTANCE)HINSTANCE_ERROR)
- {
- HRESULT (STDAPICALLTYPE *pfn)(void);
- BOOL fRes=FALSE;
-
- if (fUnreg)
- {
- (FARPROC&)pfn=GetProcAddress(hMod
- , "DllUnregisterServer");
-
- if (NULL!=pfn)
- fRes=SUCCEEDED((*pfn)());
-
- MessageBoxA(NULL, fRes
- ? "DLL unregistration succeeded."
- : "DLL unregistration failed.", "SelfReg", MB_OK);
- }
- else
- {
- (FARPROC&)pfn=GetProcAddress(hMod
- , "DllRegisterServer");
-
- if (NULL!=pfn)
- fRes=SUCCEEDED((*pfn)());
-
- MessageBoxA(NULL , fRes
- ? "DLL registration succeeded."
- : "DLL registration failed.", "SelfReg", MB_OK);
- }
-
- CoFreeLibrary(hMod);
- CoUninitialize();
- }
- else
- {
- MessageBoxA(NULL, "LoadLibrary failed.", "SelfReg"
- , MB_OK);
- }
- }
-
- return 1;
- }
-
-
-
-
- LPSTR PszWhiteSpaceScan(LPSTR psz, BOOL fSkip)
- {
- char ch;
- BOOL fWhite;
-
- while (ch=*psz)
- {
- fWhite=('\n'==ch || '\r'==ch
- || '\t'==ch || ' '==ch);
-
- //Too bad C doesn't have a logical XOR (^^) operator.
- if ((fSkip && !fWhite) || (!fSkip && fWhite))
- break;
-
- psz++;
- }
-
- return psz;
- }
-