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 #include "setup_main.hxx"
25 
26 //--------------------------------------------------------------------------
27 
28 #ifdef SetupAppX
29  #undef SetupAppX
30 #endif
31 
32 #ifdef Create_SetupAppX
33  #undef Create_SetupAppX
34 #endif
35 
36 #ifdef LanguageDataX
37  #undef LanguageDataX
38 #endif
39 
40 
41 #ifdef UNICODE
42  #define SetupAppX          SetupAppW
43  #define Create_SetupAppX   Create_SetupAppW
44  #define LanguageDataX      LanguageDataW
45 #else
46  #define SetupAppX          SetupAppA
47  #define Create_SetupAppX   Create_SetupAppA
48  #define LanguageDataX      LanguageDataA
49 #endif
50 
51 //--------------------------------------------------------------------------
52 
53 struct LanguageDataX
54 {
55     long    m_nLanguageID;
56     LPTSTR  m_pTransform;
57 
58      LanguageDataX( LPTSTR pData );
59     ~LanguageDataX();
60 };
61 
62 //--------------------------------------------------------------------------
63 
64 class SetupAppX : public SetupApp
65 {
66     HINSTANCE   m_hInst;
67     HANDLE      m_hMapFile;
68     LPTSTR      m_pAppTitle;
69     LPTSTR      m_pCmdLine;
70     LPTSTR      m_pDatabase;
71     LPTSTR      m_pReqVersion;
72     LPTSTR      m_pProductName;
73     LPTSTR      m_pAdvertise;
74     LPTSTR      m_pTmpName;
75     LPTSTR      m_pErrorText;
76     LPTSTR      m_pModuleFile;
77     LPTSTR      m_pPatchFiles;
78     LPCTSTR     m_pUpgradeKey;
79     LPCTSTR     m_pProductVersion;
80     int        *m_pMSIErrorCode;
81 
82     boolean     m_bQuiet            : 1;
83     boolean     m_bIgnoreAlreadyRunning : 1;
84     boolean     m_bRegNoMsoTypes :1;
85     boolean     m_bRegAllMsoTypes :1;
86     boolean     m_bIsMinorUpgrade :1;
87     boolean     m_bSupportsPatch :1;
88 
89     FILE       *m_pLogFile;
90 
91     long            m_nLanguageID;
92     long            m_nLanguageCount;
93     LanguageDataX** m_ppLanguageList;
94 
95 private:
96 
97     boolean     GetPathToFile( TCHAR* pFileName, TCHAR **pPath );
98     LPCTSTR     GetPathToMSI();
99 
100     int         GetNameValue( TCHAR* pLine, TCHAR **pName, TCHAR **pValue );
101     boolean     GetProfileSection( LPCTSTR pFileName, LPCTSTR pSection,
102                                    DWORD& rSize, LPTSTR *pRetBuf );
103     LPTSTR      CopyIniFile( LPCTSTR pIniFile );
104     void        ConvertNewline( LPTSTR pText ) const;
105 
106     boolean     LaunchInstaller( LPCTSTR pParam );
107     HMODULE     LoadMsiLibrary();
108     DWORD       WaitForProcess( HANDLE hHandle );
109 
110     boolean     GetCmdLineParameters( LPTSTR *pCmdLine );
111     DWORD       GetNextArgument( LPCTSTR pStr, LPTSTR *pArg,
112                                  LPTSTR *pNext, boolean bStripQuotes = false );
113     boolean     IsAdmin();
114 
115     boolean     GetCommandLine();
116 
117     boolean     IsTerminalServerInstalled() const;
118     void        AddFileToPatchList( TCHAR* pPath, TCHAR* pFile );
119     boolean     IsPatchInstalled( TCHAR* pBaseDir, TCHAR* pFileName );
120     boolean     InstallRuntimes( TCHAR* pProductCode, TCHAR* pFileName );
121 
122 public:
123                     SetupAppX();
124                    ~SetupAppX();
125 
126     virtual boolean Initialize( HINSTANCE hInst );
127     virtual boolean AlreadyRunning() const;
128     virtual boolean ReadProfile();
129     virtual boolean GetPatches();
130     virtual boolean ChooseLanguage( long& rLanguage );
131     virtual boolean CheckVersion();
132     virtual boolean CheckForUpgrade();
133     virtual boolean InstallRuntimes();
134     virtual boolean Install( long nLanguage );
135 
136     virtual UINT    GetError() const;
137     virtual void    DisplayError( UINT nErr ) const;
138 
139     void            Log( LPCTSTR pMessage, LPCTSTR pText = NULL ) const;
140 
GetLanguageCount() const141     long            GetLanguageCount() const { return m_nLanguageCount; }
142     long            GetLanguageID( long nIndex ) const;
143     void            GetLanguageName( long nLanguage, LPTSTR sName ) const;
144 
GetAppTitle() const145     LPCTSTR         GetAppTitle() const { return m_pAppTitle; }
146     LPTSTR          SetProdToAppTitle( LPCTSTR pProdName );
GetHInst() const147     HINSTANCE       GetHInst() const { return m_hInst; }
148 };
149 
150 //--------------------------------------------------------------------------
151