1*cdf0e10cSrcweir /*************************************************************************
2*cdf0e10cSrcweir  *
3*cdf0e10cSrcweir  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
4*cdf0e10cSrcweir  *
5*cdf0e10cSrcweir  * Copyright 2000, 2010 Oracle and/or its affiliates.
6*cdf0e10cSrcweir  *
7*cdf0e10cSrcweir  * OpenOffice.org - a multi-platform office productivity suite
8*cdf0e10cSrcweir  *
9*cdf0e10cSrcweir  * This file is part of OpenOffice.org.
10*cdf0e10cSrcweir  *
11*cdf0e10cSrcweir  * OpenOffice.org is free software: you can redistribute it and/or modify
12*cdf0e10cSrcweir  * it under the terms of the GNU Lesser General Public License version 3
13*cdf0e10cSrcweir  * only, as published by the Free Software Foundation.
14*cdf0e10cSrcweir  *
15*cdf0e10cSrcweir  * OpenOffice.org is distributed in the hope that it will be useful,
16*cdf0e10cSrcweir  * but WITHOUT ANY WARRANTY; without even the implied warranty of
17*cdf0e10cSrcweir  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
18*cdf0e10cSrcweir  * GNU Lesser General Public License version 3 for more details
19*cdf0e10cSrcweir  * (a copy is included in the LICENSE file that accompanied this code).
20*cdf0e10cSrcweir  *
21*cdf0e10cSrcweir  * You should have received a copy of the GNU Lesser General Public License
22*cdf0e10cSrcweir  * version 3 along with OpenOffice.org.  If not, see
23*cdf0e10cSrcweir  * <http://www.openoffice.org/license.html>
24*cdf0e10cSrcweir  * for a copy of the LGPLv3 License.
25*cdf0e10cSrcweir  *
26*cdf0e10cSrcweir  ************************************************************************/
27*cdf0e10cSrcweir 
28*cdf0e10cSrcweir // MARKER(update_precomp.py): autogen include statement, do not remove
29*cdf0e10cSrcweir #include "precompiled_desktop.hxx"
30*cdf0e10cSrcweir 
31*cdf0e10cSrcweir #include "launcher.hxx"
32*cdf0e10cSrcweir 
33*cdf0e10cSrcweir 
34*cdf0e10cSrcweir #ifndef _WINDOWS_
35*cdf0e10cSrcweir #	define WIN32_LEAN_AND_MEAN
36*cdf0e10cSrcweir #if defined _MSC_VER
37*cdf0e10cSrcweir #pragma warning(push, 1)
38*cdf0e10cSrcweir #endif
39*cdf0e10cSrcweir #	include <windows.h>
40*cdf0e10cSrcweir #	include <shellapi.h>
41*cdf0e10cSrcweir #if defined _MSC_VER
42*cdf0e10cSrcweir #pragma warning(pop)
43*cdf0e10cSrcweir #endif
44*cdf0e10cSrcweir #endif
45*cdf0e10cSrcweir 
46*cdf0e10cSrcweir 
47*cdf0e10cSrcweir #include <stdlib.h>
48*cdf0e10cSrcweir #include <malloc.h>
49*cdf0e10cSrcweir 
50*cdf0e10cSrcweir 
51*cdf0e10cSrcweir #ifdef __MINGW32__
52*cdf0e10cSrcweir extern "C" int APIENTRY WinMain( HINSTANCE, HINSTANCE, LPSTR, int )
53*cdf0e10cSrcweir #else
54*cdf0e10cSrcweir extern "C" int APIENTRY _tWinMain( HINSTANCE, HINSTANCE, LPTSTR, int )
55*cdf0e10cSrcweir #endif
56*cdf0e10cSrcweir {
57*cdf0e10cSrcweir 	// Retreive startup info
58*cdf0e10cSrcweir 
59*cdf0e10cSrcweir 	STARTUPINFO	aStartupInfo;
60*cdf0e10cSrcweir 
61*cdf0e10cSrcweir 	ZeroMemory( &aStartupInfo, sizeof(aStartupInfo) );
62*cdf0e10cSrcweir 	aStartupInfo.cb = sizeof( aStartupInfo );
63*cdf0e10cSrcweir 	GetStartupInfo( &aStartupInfo );
64*cdf0e10cSrcweir 
65*cdf0e10cSrcweir 	// Retrieve command line
66*cdf0e10cSrcweir 
67*cdf0e10cSrcweir 	LPTSTR	lpCommandLine = GetCommandLine();
68*cdf0e10cSrcweir 
69*cdf0e10cSrcweir 	LPTSTR	*ppArguments = NULL;
70*cdf0e10cSrcweir 	int		nArguments = 0;
71*cdf0e10cSrcweir 
72*cdf0e10cSrcweir 	ppArguments = GetArgv( &nArguments );
73*cdf0e10cSrcweir 
74*cdf0e10cSrcweir     // if ( 1 == nArguments )
75*cdf0e10cSrcweir 	{
76*cdf0e10cSrcweir 		lpCommandLine = (LPTSTR)_alloca( sizeof(_TCHAR) * (_tcslen(lpCommandLine) + _tcslen(APPLICATION_SWITCH) + 2) );
77*cdf0e10cSrcweir 
78*cdf0e10cSrcweir 		_tcscpy( lpCommandLine, GetCommandLine() );
79*cdf0e10cSrcweir 		_tcscat( lpCommandLine, _T(" ") );
80*cdf0e10cSrcweir 		_tcscat( lpCommandLine, APPLICATION_SWITCH );
81*cdf0e10cSrcweir 	}
82*cdf0e10cSrcweir 
83*cdf0e10cSrcweir 
84*cdf0e10cSrcweir 	// Calculate application name
85*cdf0e10cSrcweir 
86*cdf0e10cSrcweir 	TCHAR	szApplicationName[MAX_PATH];
87*cdf0e10cSrcweir 	TCHAR	szDrive[MAX_PATH];
88*cdf0e10cSrcweir 	TCHAR	szDir[MAX_PATH];
89*cdf0e10cSrcweir 	TCHAR	szFileName[MAX_PATH];
90*cdf0e10cSrcweir 	TCHAR	szExt[MAX_PATH];
91*cdf0e10cSrcweir 
92*cdf0e10cSrcweir 	GetModuleFileName( NULL, szApplicationName, MAX_PATH );
93*cdf0e10cSrcweir 	_tsplitpath( szApplicationName, szDrive, szDir, szFileName, szExt );
94*cdf0e10cSrcweir 	_tmakepath( szApplicationName, szDrive, szDir, OFFICE_IMAGE_NAME, _T(".exe") );
95*cdf0e10cSrcweir 
96*cdf0e10cSrcweir 	PROCESS_INFORMATION	aProcessInfo;
97*cdf0e10cSrcweir 
98*cdf0e10cSrcweir 	BOOL	fSuccess = CreateProcess(
99*cdf0e10cSrcweir 		szApplicationName,
100*cdf0e10cSrcweir 		lpCommandLine,
101*cdf0e10cSrcweir 		NULL,
102*cdf0e10cSrcweir 		NULL,
103*cdf0e10cSrcweir 		TRUE,
104*cdf0e10cSrcweir 		0,
105*cdf0e10cSrcweir 		NULL,
106*cdf0e10cSrcweir 		NULL,
107*cdf0e10cSrcweir 		&aStartupInfo,
108*cdf0e10cSrcweir 		&aProcessInfo );
109*cdf0e10cSrcweir 
110*cdf0e10cSrcweir 	if ( fSuccess )
111*cdf0e10cSrcweir 	{
112*cdf0e10cSrcweir 		// Wait for soffice process to be terminated to allow other applications
113*cdf0e10cSrcweir 		// to wait for termination of started process
114*cdf0e10cSrcweir 
115*cdf0e10cSrcweir 		WaitForSingleObject( aProcessInfo.hProcess, INFINITE );
116*cdf0e10cSrcweir 
117*cdf0e10cSrcweir 		CloseHandle( aProcessInfo.hProcess );
118*cdf0e10cSrcweir 		CloseHandle( aProcessInfo.hThread );
119*cdf0e10cSrcweir 
120*cdf0e10cSrcweir 		return 0;
121*cdf0e10cSrcweir 	}
122*cdf0e10cSrcweir 
123*cdf0e10cSrcweir 	DWORD	dwError = GetLastError();
124*cdf0e10cSrcweir 
125*cdf0e10cSrcweir 	LPVOID lpMsgBuf;
126*cdf0e10cSrcweir 
127*cdf0e10cSrcweir 	FormatMessage(
128*cdf0e10cSrcweir 		FORMAT_MESSAGE_ALLOCATE_BUFFER |
129*cdf0e10cSrcweir 		FORMAT_MESSAGE_FROM_SYSTEM,
130*cdf0e10cSrcweir 		NULL,
131*cdf0e10cSrcweir 		dwError,
132*cdf0e10cSrcweir 		MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), // Default language
133*cdf0e10cSrcweir 		(LPTSTR)&lpMsgBuf,
134*cdf0e10cSrcweir 		0,
135*cdf0e10cSrcweir 		NULL
136*cdf0e10cSrcweir 	);
137*cdf0e10cSrcweir 
138*cdf0e10cSrcweir 	// Display the string.
139*cdf0e10cSrcweir 	MessageBox( NULL, (LPCTSTR)lpMsgBuf, NULL, MB_OK | MB_ICONERROR );
140*cdf0e10cSrcweir 
141*cdf0e10cSrcweir 	// Free the buffer.
142*cdf0e10cSrcweir 	LocalFree( lpMsgBuf );
143*cdf0e10cSrcweir 
144*cdf0e10cSrcweir 	return GetLastError();
145*cdf0e10cSrcweir }
146*cdf0e10cSrcweir 
147