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