blob: 2f82cb6b07d45bd19571caf0e2f425de3c25aee3 [file]
/**************************************************************
*
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance
* with the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing,
* software distributed under the License is distributed on an
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
* KIND, either express or implied. See the License for the
* specific language governing permissions and limitations
* under the License.
*
*************************************************************/
#include <stdio.h>
//--------------------------------------------------------------------------
struct LanguageData
{
long m_nLanguageID;
LPTSTR m_pTransform;
LanguageData( LPTSTR pData );
~LanguageData();
};
//--------------------------------------------------------------------------
class SetupApp
{
DWORD m_nOSVersion;
DWORD m_nMinorVersion;
boolean m_bIsWin9x : 1;
boolean m_bNeedReboot : 1;
boolean m_bAdministrative : 1;
HINSTANCE m_hInst;
HANDLE m_hMapFile;
LPTSTR m_pAppTitle;
LPTSTR m_pCmdLine;
LPTSTR m_pDatabase;
LPTSTR m_pReqVersion;
LPTSTR m_pProductName;
LPTSTR m_pAdvertise;
LPTSTR m_pTmpName;
LPTSTR m_pErrorText;
LPTSTR m_pModuleFile;
LPTSTR m_pPatchFiles;
LPCTSTR m_pUpgradeKey;
LPCTSTR m_pProductVersion;
int *m_pMSIErrorCode;
boolean m_bQuiet : 1;
boolean m_bIgnoreAlreadyRunning : 1;
boolean m_bRegNoMsoTypes :1;
boolean m_bRegAllMsoTypes :1;
boolean m_bIsMinorUpgrade :1;
boolean m_bSupportsPatch :1;
FILE *m_pLogFile;
long m_nLanguageID;
long m_nLanguageCount;
LanguageData** m_ppLanguageList;
private:
boolean GetPathToFile( TCHAR* pFileName, TCHAR **pPath );
LPCTSTR GetPathToMSI();
int GetNameValue( TCHAR* pLine, TCHAR **pName, TCHAR **pValue );
boolean GetProfileSection( LPCTSTR pFileName, LPCTSTR pSection,
DWORD& rSize, LPTSTR *pRetBuf );
LPTSTR CopyIniFile( LPCTSTR pIniFile );
void ConvertNewline( LPTSTR pText ) const;
boolean LaunchInstaller( LPCTSTR pParam );
HMODULE LoadMsiLibrary();
DWORD WaitForProcess( HANDLE hHandle );
boolean GetCmdLineParameters( LPTSTR *pCmdLine );
DWORD GetNextArgument( LPCTSTR pStr, LPTSTR *pArg,
LPTSTR *pNext, boolean bStripQuotes = false );
boolean IsAdmin();
boolean GetCommandLine();
boolean IsTerminalServerInstalled() const;
void AddFileToPatchList( TCHAR* pPath, TCHAR* pFile );
boolean IsPatchInstalled( TCHAR* pBaseDir, TCHAR* pFileName );
boolean InstallRuntimes( TCHAR* pProductCode, TCHAR* pFileName );
public:
UINT m_uiRet;
SetupApp();
virtual ~SetupApp();
virtual boolean Initialize( HINSTANCE hInst );
virtual boolean AlreadyRunning() const;
virtual boolean ReadProfile();
virtual boolean GetPatches();
virtual boolean ChooseLanguage( long& rLanguage );
virtual boolean CheckVersion();
virtual boolean CheckForUpgrade();
virtual boolean InstallRuntimes();
virtual boolean Install( long nLanguage );
virtual UINT GetError() const;
virtual void DisplayError( UINT nErr ) const;
void SetError( UINT nErr ) { m_uiRet = nErr; }
boolean IsWin9x() const { return m_bIsWin9x; }
DWORD GetOSVersion() const { return m_nOSVersion; }
DWORD GetMinorVersion() const { return m_nMinorVersion; }
boolean IsAdminInstall() { return m_bAdministrative; }
void SetAdminInstall( boolean bValue ) { m_bAdministrative = bValue; }
void SetRebootNeeded( boolean bNeedReboot ) { m_bNeedReboot = bNeedReboot; }
boolean NeedReboot() const { return m_bNeedReboot; }
void Log( LPCTSTR pMessage, LPCTSTR pText = NULL ) const;
long GetLanguageCount() const { return m_nLanguageCount; }
long GetLanguageID( long nIndex ) const;
void GetLanguageName( long nLanguage, LPTSTR sName ) const;
LPCTSTR GetAppTitle() const { return m_pAppTitle; }
LPTSTR SetProdToAppTitle( LPCTSTR pProdName );
HINSTANCE GetHInst() const { return m_hInst; }
};
//--------------------------------------------------------------------------