1 /************************************************************** 2 * 3 * Licensed to the Apache Software Foundation (ASF) under one 4 * or more contributor license agreements. See the NOTICE file 5 * distributed with this work for additional information 6 * regarding copyright ownership. The ASF licenses this file 7 * to you under the Apache License, Version 2.0 (the 8 * "License"); you may not use this file except in compliance 9 * with the License. You may obtain a copy of the License at 10 * 11 * http://www.apache.org/licenses/LICENSE-2.0 12 * 13 * Unless required by applicable law or agreed to in writing, 14 * software distributed under the License is distributed on an 15 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY 16 * KIND, either express or implied. See the License for the 17 * specific language governing permissions and limitations 18 * under the License. 19 * 20 *************************************************************/ 21 22 23 24 // MARKER(update_precomp.py): autogen include statement, do not remove 25 #include "precompiled_desktop.hxx" 26 27 #if defined _MSC_VER 28 #pragma warning(push, 1) 29 #endif 30 #include <windows.h> 31 #if defined _MSC_VER 32 #pragma warning(pop) 33 #endif 34 #include <new> 35 36 #include "setup_main.hxx" 37 38 //-------------------------------------------------------------------------- 39 40 void __cdecl newhandler() 41 { 42 throw std::bad_alloc(); 43 return; 44 } 45 46 //-------------------------------------------------------------------------- 47 48 SetupApp::SetupApp() 49 { 50 m_uiRet = ERROR_SUCCESS; 51 52 // Get OS version 53 OSVERSIONINFO sInfoOS; 54 55 ZeroMemory( &sInfoOS, sizeof(OSVERSIONINFO) ); 56 sInfoOS.dwOSVersionInfoSize = sizeof( OSVERSIONINFO ); 57 58 GetVersionEx( &sInfoOS ); 59 60 m_nOSVersion = sInfoOS.dwMajorVersion; 61 m_nMinorVersion = sInfoOS.dwMinorVersion; 62 m_bIsWin9x = ( VER_PLATFORM_WIN32_NT != sInfoOS.dwPlatformId ); 63 m_bNeedReboot = false; 64 m_bAdministrative = false; 65 } 66 67 //-------------------------------------------------------------------------- 68 69 SetupApp::~SetupApp() 70 { 71 } 72 73 //-------------------------------------------------------------------------- 74 //-------------------------------------------------------------------------- 75 //-------------------------------------------------------------------------- 76 77 extern "C" int __stdcall WinMain( HINSTANCE hInst, HINSTANCE, LPSTR, int ) 78 { 79 // Get OS version 80 OSVERSIONINFO sInfoOS; 81 82 ZeroMemory( &sInfoOS, sizeof(OSVERSIONINFO) ); 83 sInfoOS.dwOSVersionInfoSize = sizeof( OSVERSIONINFO ); 84 85 GetVersionEx( &sInfoOS ); 86 87 boolean bIsWin9x = ( VER_PLATFORM_WIN32_NT != sInfoOS.dwPlatformId ); 88 89 SetupApp *pSetup; 90 91 if ( bIsWin9x ) 92 pSetup = Create_SetupAppA(); 93 else 94 pSetup = Create_SetupAppW(); 95 96 try 97 { 98 if ( ! pSetup->Initialize( hInst ) ) 99 throw pSetup->GetError(); 100 101 if ( pSetup->AlreadyRunning() ) 102 throw (UINT) ERROR_INSTALL_ALREADY_RUNNING; 103 104 if ( ! pSetup->ReadProfile() ) 105 throw pSetup->GetError(); 106 107 if ( ! pSetup->CheckVersion() ) 108 throw pSetup->GetError(); 109 110 if ( ! pSetup->IsAdminInstall() ) 111 if ( ! pSetup->GetPatches() ) 112 throw pSetup->GetError(); 113 114 // CheckForUpgrade() has to be called after calling GetPatches()! 115 if ( ! pSetup->CheckForUpgrade() ) 116 throw pSetup->GetError(); 117 118 long nLanguage; 119 120 if ( ! pSetup->ChooseLanguage( nLanguage ) ) 121 throw pSetup->GetError(); 122 123 if ( ! pSetup->InstallRuntimes() ) 124 throw pSetup->GetError(); 125 126 if ( ! pSetup->Install( nLanguage ) ) 127 throw pSetup->GetError(); 128 } 129 catch ( std::bad_alloc ) 130 { 131 pSetup->DisplayError( ERROR_OUTOFMEMORY ); 132 } 133 catch ( UINT nErr ) 134 { 135 pSetup->DisplayError( nErr ); 136 } 137 138 int nRet = pSetup->GetError(); 139 140 delete pSetup; 141 142 return nRet; 143 } 144