241 lines
6.9 KiB
C++
241 lines
6.9 KiB
C++
|
// jlaunch.cpp : Defines the entry point for the application.
|
|||
|
//
|
|||
|
|
|||
|
#include "stdafx.h"
|
|||
|
#include "resource.h"
|
|||
|
#include <shellapi.h>
|
|||
|
#include <stdlib.h>
|
|||
|
#include <direct.h>
|
|||
|
|
|||
|
//main window handle
|
|||
|
HWND hwnd;
|
|||
|
|
|||
|
//instance of application handle
|
|||
|
HINSTANCE hInst;
|
|||
|
|
|||
|
//application name
|
|||
|
char szAppName[]="Adempiere Launcher";
|
|||
|
|
|||
|
//path to program to run
|
|||
|
char program_to_run[300];
|
|||
|
//working directory
|
|||
|
char workingdir[300];
|
|||
|
//parameters to send
|
|||
|
char parameters[500];
|
|||
|
|
|||
|
//the procedure that handle all messages sent to the window
|
|||
|
LRESULT CALLBACK WndProc(HWND,UINT,WPARAM,LPARAM);
|
|||
|
|
|||
|
//main program
|
|||
|
int APIENTRY WinMain(HINSTANCE hInstance,
|
|||
|
HINSTANCE hPrevInstance,
|
|||
|
LPSTR lpCmdLine,
|
|||
|
int nCmdShow)
|
|||
|
{
|
|||
|
//structure for creating the application window
|
|||
|
WNDCLASSEX wndclass;
|
|||
|
|
|||
|
wndclass.cbSize=sizeof(WNDCLASSEX); // size of structure
|
|||
|
wndclass.style=CS_HREDRAW|CS_VREDRAW; // type of redrawing
|
|||
|
wndclass.lpfnWndProc=WndProc; // address of procedure that handle messages sent to the window
|
|||
|
wndclass.cbClsExtra=0;
|
|||
|
wndclass.cbWndExtra=0;
|
|||
|
wndclass.hInstance=hInstance; // instance handle
|
|||
|
wndclass.hIcon=LoadIcon(hInstance,MAKEINTRESOURCE(IDI_JLUNCHM));// window icon
|
|||
|
wndclass.hCursor=LoadCursor(NULL,IDC_ARROW); // default cursor
|
|||
|
wndclass.hbrBackground=(HBRUSH)GetStockObject(WHITE_BRUSH); // default background
|
|||
|
wndclass.lpszMenuName=NULL; // no menu
|
|||
|
wndclass.lpszClassName=szAppName; // name of class=name of application
|
|||
|
wndclass.hIconSm=LoadIcon(hInstance,MAKEINTRESOURCE(IDI_JLUNCH)); // small icon for window
|
|||
|
|
|||
|
// register window class into system
|
|||
|
RegisterClassEx(&wndclass);
|
|||
|
|
|||
|
// copying instance handle into another variable
|
|||
|
hInst=hInstance;
|
|||
|
|
|||
|
// initially program_to run is empty
|
|||
|
program_to_run[0]='\0';
|
|||
|
// initial working directory is blank
|
|||
|
workingdir[0]='\0';
|
|||
|
// initial no parameter
|
|||
|
parameters[0]='\0';
|
|||
|
|
|||
|
// creating main window
|
|||
|
hwnd=CreateWindow(szAppName,"Adempiere Lancher",WS_OVERLAPPEDWINDOW,CW_USEDEFAULT,
|
|||
|
CW_USEDEFAULT,CW_USEDEFAULT,CW_USEDEFAULT,NULL,NULL,hInst,NULL);
|
|||
|
|
|||
|
// showing main window minimized
|
|||
|
ShowWindow(hwnd,SW_MINIMIZE);
|
|||
|
|
|||
|
|
|||
|
// getting "adempiereHome" environment variable value
|
|||
|
char* adempiereHome;
|
|||
|
adempiereHome=getenv("ADEMPIERE_HOME");
|
|||
|
if (adempiereHome == NULL)
|
|||
|
{
|
|||
|
MessageBox(hwnd, "ADEMPIERE_HOME environment variable not set","Adempiere: Error",MB_OK|MB_ICONSTOP);
|
|||
|
return 0;
|
|||
|
}
|
|||
|
// MessageBox(hwnd, adempiereHome, "ADEMPIERE_HOME", MB_OK|MB_ICONSTOP);
|
|||
|
strcpy(workingdir,adempiereHome);
|
|||
|
strcat(workingdir,"\\lib");
|
|||
|
|
|||
|
// change the working directory to %ADEMPIERE_HOME%\lib
|
|||
|
int rez=_chdir(workingdir);
|
|||
|
if(rez==-1)
|
|||
|
{
|
|||
|
char mess[300]="Cannot change to working directory:\n\t";
|
|||
|
strcat(mess, workingdir);
|
|||
|
MessageBox(hwnd, mess,"Adempiere: Error",MB_OK|MB_ICONSTOP);
|
|||
|
return 0;
|
|||
|
}
|
|||
|
|
|||
|
// Get Java_Home
|
|||
|
char* javaHome;
|
|||
|
javaHome=getenv("JAVA_HOME");
|
|||
|
if (javaHome == NULL)
|
|||
|
{
|
|||
|
MessageBox(hwnd, "JAVA_HOME environment variable not set","Adempiere: Error",MB_OK|MB_ICONSTOP);
|
|||
|
return 0;
|
|||
|
}
|
|||
|
strcpy(program_to_run,javaHome);
|
|||
|
|
|||
|
// search for -debug parameter
|
|||
|
char *pos;
|
|||
|
pos = strstr (lpCmdLine,"-debug"); // get the position of -debug
|
|||
|
// it is not present so run javaw
|
|||
|
if (pos == NULL)
|
|||
|
strcat(program_to_run,"\\bin\\javaw.exe");
|
|||
|
else
|
|||
|
{
|
|||
|
// for(int i=0; i<7; i++) // erase -debug
|
|||
|
// *(pos+i) = ' ';
|
|||
|
strcat(program_to_run,"\\bin\\java.exe");
|
|||
|
}
|
|||
|
// MessageBox(hwnd, program_to_run, "Program", MB_OK|MB_ICONSTOP);
|
|||
|
|
|||
|
// Parameters ------------------------------------------------------------
|
|||
|
|
|||
|
// Environment variables License & Product
|
|||
|
char* envInfo;
|
|||
|
envInfo=getenv("ADEMPIERE_PRODUCT");
|
|||
|
if (envInfo == NULL)
|
|||
|
{
|
|||
|
// MessageBox(hwnd, "No Product Info", "Environment", MB_OK|MB_ICONSTOP);
|
|||
|
strcat(parameters," -DADEMPIERE_PRODUCT=0");
|
|||
|
}
|
|||
|
else
|
|||
|
{
|
|||
|
strcat(parameters," -DADEMPIERE_PRODUCT=");
|
|||
|
strcat(parameters, envInfo);
|
|||
|
}
|
|||
|
strcat(parameters," -DADEMPIERE_HOME=");
|
|||
|
strcat(parameters, adempiereHome);
|
|||
|
|
|||
|
|
|||
|
// Parmeter Adempiere - 32-512 MB Allocation Pool
|
|||
|
strcat(parameters," -Xms32m -Xmx512m");
|
|||
|
strcat(parameters," -cp Adempiere.jar;AdempiereCLib.jar ");
|
|||
|
strcat(parameters," org.compiere.Adempiere ");
|
|||
|
|
|||
|
// runtime parameter except
|
|||
|
strcat(parameters, lpCmdLine);
|
|||
|
|
|||
|
// MessageBox(hwnd, parameters, "Parameters", MB_OK|MB_ICONSTOP);
|
|||
|
|
|||
|
// Execute command
|
|||
|
long result=(long)ShellExecute (hwnd,"open", program_to_run, parameters, NULL, SW_MINIMIZE); // SW_SHOW
|
|||
|
|
|||
|
// Check Error
|
|||
|
if(result<=32)
|
|||
|
{
|
|||
|
char message[200];
|
|||
|
switch(result)
|
|||
|
{
|
|||
|
case 0:
|
|||
|
strcpy(message,"The operating system is out of memory or resources.");
|
|||
|
break;
|
|||
|
case ERROR_FILE_NOT_FOUND:
|
|||
|
strcpy(message,"The specified file was not found: ");
|
|||
|
strcat(message, program_to_run);
|
|||
|
break;
|
|||
|
case ERROR_PATH_NOT_FOUND:
|
|||
|
strcpy(message,"The specified path was not found: ");
|
|||
|
strcat(message, program_to_run);
|
|||
|
break;
|
|||
|
case ERROR_BAD_FORMAT:
|
|||
|
strcpy(message,"The .exe file is invalid (non-Win32<33> .exe or error in .exe image).");
|
|||
|
break;
|
|||
|
case SE_ERR_ACCESSDENIED:
|
|||
|
strcpy(message,"The operating system denied access to the specified file.");
|
|||
|
break;
|
|||
|
case SE_ERR_ASSOCINCOMPLETE:
|
|||
|
strcpy(message,"The file name association is incomplete or invalid.");
|
|||
|
break;
|
|||
|
case SE_ERR_DDEBUSY:
|
|||
|
strcpy(message,"The DDE transaction could not be completed because other DDE transactions were being processed.");
|
|||
|
break;
|
|||
|
case SE_ERR_DDEFAIL:
|
|||
|
strcpy(message,"The DDE transaction failed.");
|
|||
|
break;
|
|||
|
case SE_ERR_DDETIMEOUT:
|
|||
|
strcpy(message,"The DDE transaction could not be completed because the request timed out.");
|
|||
|
break;
|
|||
|
case SE_ERR_DLLNOTFOUND:
|
|||
|
strcpy(message,"The specified dynamic-link library was not found.");
|
|||
|
break;
|
|||
|
case SE_ERR_NOASSOC:
|
|||
|
strcpy(message,"There is no application associated with the given file name extension.");
|
|||
|
break;
|
|||
|
case SE_ERR_OOM:
|
|||
|
strcpy(message,"There was not enough memory to complete the operation.");
|
|||
|
break;
|
|||
|
case SE_ERR_SHARE:
|
|||
|
strcpy(message,"A sharing violation occurred.");
|
|||
|
break;
|
|||
|
default:
|
|||
|
strcpy(message,"An unspecified error occured!");
|
|||
|
}
|
|||
|
MessageBox(hwnd,message,"Adempiere: error",MB_OK|MB_ICONSTOP);
|
|||
|
}
|
|||
|
|
|||
|
// quitting form this application
|
|||
|
PostQuitMessage(0);
|
|||
|
|
|||
|
return 0;
|
|||
|
}
|
|||
|
|
|||
|
|
|||
|
// this function handles all messages received by my window
|
|||
|
LRESULT CALLBACK WndProc(HWND hwnd,UINT iMsg,WPARAM wParam,LPARAM lParam)
|
|||
|
{
|
|||
|
static long cxChar,cyChar;
|
|||
|
HDC hDC;
|
|||
|
TEXTMETRIC tm;
|
|||
|
|
|||
|
switch(iMsg)
|
|||
|
{
|
|||
|
case WM_CREATE:
|
|||
|
hDC=GetDC(hwnd);
|
|||
|
GetTextMetrics(hDC,&tm);
|
|||
|
cxChar=tm.tmAveCharWidth;
|
|||
|
cyChar=tm.tmHeight+tm.tmExternalLeading;
|
|||
|
ReleaseDC(hwnd,hDC);
|
|||
|
return 0;
|
|||
|
case WM_PAINT:
|
|||
|
return 0;
|
|||
|
case WM_CLOSE:
|
|||
|
break;
|
|||
|
case WM_DESTROY:
|
|||
|
PostQuitMessage(0);
|
|||
|
return 0;
|
|||
|
case WM_SYSCOMMAND:
|
|||
|
break;
|
|||
|
case WM_COMMAND:
|
|||
|
break;
|
|||
|
}
|
|||
|
return DefWindowProc(hwnd,iMsg,wParam,lParam);
|
|||
|
}
|
|||
|
|