home *** CD-ROM | disk | FTP | other *** search
/ Looney Tunes Photo Fun / LooneyTunesPhotoFun.iso / Daosdk / DISK4 / DAOSDK.1 / regadll.c < prev    next >
C/C++ Source or Header  |  1998-04-06  |  6KB  |  283 lines

  1. //
  2. //
  3. //    File:        RegADLL.c
  4. //
  5. //    Purpose:    Call DLLRegisterServer/UnRegisterServer in a 
  6. //                specified DLL.
  7. //                Needed as a buffer between InstallShield and the
  8. //                DLL itself
  9. //
  10. //
  11.  
  12. #include  <windows.h>
  13. #include  <assert.h>
  14. #include  <VER.H>
  15. #include  "RegADLL.h"
  16.  
  17. BOOL WINAPI LibMain ( HINSTANCE hInstDLL, DWORD dwReason, LPVOID lpvReserved )
  18. {
  19.         return (TRUE);
  20.         UNREFERENCED_PARAMETER( hInstDLL );
  21.         UNREFERENCED_PARAMETER( dwReason );
  22.         UNREFERENCED_PARAMETER( lpvReserved );
  23. }
  24.  
  25.  
  26. INT WINAPI RegisterADLL( HWND hwndMain, LPLONG lplValue, LPSTR pszPath )
  27. {
  28.     HINSTANCE    hModule;
  29.     CTLREGPROC    DLLRegisterServer;
  30.     HRESULT        regResult;
  31.     BOOL        bResult = FALSE;
  32.  
  33.     //Gotta have good pointers
  34.     assert(pszPath != NULL) ;
  35.     assert(lplValue != NULL) ;
  36.     
  37.     //Load the DLL into memory
  38.     hModule = LoadLibrary(pszPath) ;
  39.     
  40.     if (hModule == NULL) // Load failed, couldn't get the DLL
  41.         {
  42.         *lplValue = 0L;
  43.         MessageBox(NULL, "Couldn't find DLL", pszPath, MB_ICONEXCLAMATION);
  44.         return 1;
  45.         }
  46.             
  47.     //Get a pointer to the Register function
  48.     DLLRegisterServer = (CTLREGPROC)GetProcAddress(hModule,"DllRegisterServer" ) ;
  49.     
  50.     if (DLLRegisterServer != NULL)
  51.         {
  52.         regResult = DLLRegisterServer() ;
  53.         bResult = (regResult == NOERROR) ; 
  54.         }        
  55.     else
  56.         {
  57.         MessageBox(NULL, "Missing server registration function", pszPath, MB_ICONEXCLAMATION);
  58.         }
  59.     FreeLibrary(hModule) ;          
  60.  
  61.     //Everything went OK?
  62.     *lplValue = bResult ? 1L:0L;
  63.     
  64.  
  65.     return 1;    
  66. }
  67.  
  68.  
  69. INT WINAPI UnRegisterADLL( HWND hwndMain, LPLONG lplValue, LPSTR pszPath )
  70. {
  71.     HINSTANCE    hModule;
  72.     CTLREGPROC    DLLUnregisterServer;
  73.     HRESULT        regResult;
  74.     BOOL        bResult = FALSE;
  75.     CHAR        szBuf[256];
  76.  
  77.     //Gotta have good pointers
  78.     assert(pszPath != NULL) ;
  79.     assert(lplValue != NULL) ;
  80.     
  81.     //Load the DLL into memory
  82.     hModule = LoadLibrary((LPCSTR)pszPath) ;
  83.     
  84.     if (hModule == NULL) // Load failed, couldn't get the DLL
  85.         {
  86.         *lplValue = 0L;
  87.         MessageBox(NULL, "Can't find DLL", pszPath, MB_ICONEXCLAMATION);
  88.         return 1;
  89.         }
  90.             
  91.     //Get a pointer to the UNRegister function
  92.     DLLUnregisterServer = (CTLREGPROC)GetProcAddress(hModule,"DllUnregisterServer" ) ;
  93.             
  94.     if (DLLUnregisterServer != NULL)
  95.         {
  96.         regResult = DLLUnregisterServer() ;
  97.         bResult = (regResult == NOERROR) ; 
  98.         }        
  99.     else
  100.         {
  101.         MessageBox(NULL, "Missing server Unregistration function", pszPath, MB_ICONEXCLAMATION);
  102.         }
  103.     FreeLibrary(hModule) ;          
  104.  
  105.     //Everything went OK?
  106.     *lplValue = bResult ? 1L:0L;
  107.     
  108.     if (!bResult)
  109.         {
  110.         wsprintf(szBuf, "Unregistration failed - DLLUnregisterServer returned %d", regResult);
  111.         MessageBox(NULL, szBuf, pszPath, MB_OK);
  112.         }
  113.     
  114.     return 1;    
  115.  
  116.  
  117. //
  118. // Opens the specified DLL to determine if 
  119. // it's on the system
  120. // 
  121. BOOL WINAPI IsDLLInstalled( HWND hwndMain, LPLONG lplValue, LPSTR pszPath )
  122. {
  123.     HINSTANCE    hModule;
  124.     CTLREGPROC    DLLUnregisterProc = NULL;
  125.  
  126.     //Gotta have good pointers
  127.     assert(pszPath != NULL) ;
  128.     assert(lplValue != NULL) ;
  129.  
  130.     //Assume it's OK
  131.     *lplValue = 0L;    
  132.  
  133.     //Load the DLL into memory
  134.     hModule = LoadLibrary((LPCSTR)pszPath) ;
  135.     
  136.     if (hModule == NULL) // Load failed, couldn't get the DLL
  137.         {
  138.         *lplValue = 1L;
  139.         return 0;
  140.         }
  141.             
  142.     FreeLibrary(hModule) ;          
  143.  
  144.     return 1;    
  145. }
  146.  
  147. //
  148. // Opens the specified DLL to determine if 
  149. // if the DLL is currently being used by another process
  150. // 
  151.  
  152. BOOL WINAPI IsDLLRunning( HWND hwndMain, LPLONG lplValue, LPSTR pszPath )
  153. {
  154.     HANDLE hFile;
  155.     
  156.     assert(pszPath != NULL);
  157.  
  158.     //Try to open the file - exclusively. Assume that a failure
  159.     //indicates that the file is currently running
  160.     hFile =  CreateFile(
  161.         pszPath,    // address of name of the file 
  162.         GENERIC_READ | GENERIC_WRITE,    // access (read-write) mode 
  163.         0,    // share mode (none)
  164.         NULL,    // address of security descriptor 
  165.         OPEN_EXISTING,    // how to create 
  166.         FILE_ATTRIBUTE_NORMAL,    // file attributes 
  167.         NULL     // handle of file with attributes to copy  
  168.            );    
  169.      
  170.      //If couldn't get a handle...
  171.      if(hFile == INVALID_HANDLE_VALUE)
  172.          {
  173.         //If the file exists then it must be locked by another process
  174.         if(GetFileAttributes(pszPath) != 0xFFFFFFFF)
  175.             {
  176.             CloseHandle(hFile);
  177.             *lplValue = 1L;
  178.             return TRUE;
  179.             }
  180.         }
  181.  
  182.     //It's not in use
  183.     CloseHandle(hFile);
  184.     *lplValue = 0L;
  185.     return FALSE;
  186. }
  187.  
  188.  
  189. //
  190. // Opens the OLEAUT32.DLL and looks for the UnregisterTypeLib function 
  191. // and returns an error if it's not present
  192. // 
  193.  
  194. BOOL WINAPI CheckOLEAut( HWND hwndMain, LPLONG lplValue, LPSTR pszPath )
  195. {
  196.     HINSTANCE    hModule;
  197.     CTLREGPROC    DLLUnregisterProc = NULL;
  198.  
  199.     //Gotta have good pointers
  200.     assert(pszPath != NULL) ;
  201.     assert(lplValue != NULL) ;
  202.  
  203.     //Assume it's OK
  204.     *lplValue = 0L;    
  205.  
  206.     //Load the DLL into memory
  207.     hModule = LoadLibrary((LPCSTR)pszPath) ;
  208.  
  209.     
  210.     if (hModule == NULL) // Load failed, couldn't get the DLL
  211.         {
  212.         *lplValue = 1L;
  213.         return 0;
  214.         }
  215.             
  216.     //Get a pointer to the UNRegister function
  217.     DLLUnregisterProc = (CTLREGPROC)GetProcAddress(hModule,"UnRegisterTypeLib" ) ;
  218.             
  219.     if (DLLUnregisterProc == NULL)
  220.         {
  221.         *lplValue = 1L;    
  222.         }
  223.  
  224.     FreeLibrary(hModule) ;          
  225.  
  226.     return 1;    
  227. }
  228.  
  229. //
  230. // Runs the specified executable
  231. // 
  232. // 
  233.  
  234. BOOL WINAPI RunProcess( HWND hwndMain, LPLONG lplValue, LPSTR pszPath )
  235. {
  236.     BOOL                bLaunched;
  237.     PROCESS_INFORMATION    pi;
  238.     STARTUPINFO            si;    
  239.  
  240.     assert(pszPath != NULL);
  241.  
  242.     //Fill in the startup info
  243.     si.cb = sizeof(si);
  244.     si.lpReserved = NULL;
  245.     si.lpDesktop = NULL;
  246.     si.lpTitle = NULL;
  247.     si.dwX = 0;
  248.     si.dwY = 0;
  249.     si.dwXSize = 0;
  250.     si.dwYSize = 0;
  251.     si.dwXCountChars = 0;
  252.     si.dwYCountChars = 0;
  253.     si.dwFillAttribute = 0;
  254.     si.dwFlags = STARTF_FORCEOFFFEEDBACK;
  255.     si.wShowWindow = 0;
  256.     si.cbReserved2 = 0;
  257.     si.lpReserved2 = NULL;
  258.     si.hStdInput = 0;
  259.     si.hStdOutput = 0;
  260.     si.hStdError = 0;
  261.     
  262.     //Run the specified process
  263.     bLaunched = CreateProcess(pszPath,    // pointer to name of executable module 
  264.             NULL,
  265.             NULL,
  266.             NULL,
  267.             FALSE,    
  268.             CREATE_DEFAULT_ERROR_MODE | HIGH_PRIORITY_CLASS,
  269.             NULL,
  270.             NULL,            
  271.             &si,
  272.             &pi);
  273.  
  274.     if(bLaunched)
  275.         {
  276.         //Give the process 10 seconds to complete
  277.         WaitForInputIdle(pi.hProcess, 10000);
  278.         }
  279.  
  280.     return bLaunched;
  281. }
  282.