392 cout << "NEW" << endl; 393 #endif 394 } 395 else { 396 if (nv != NULL) { 397 if (*nv > *result) { 398 #ifdef _DEBUG 399 cout << "REPLACE" << endl; 400 #endif 401 delete result; 402 result = nv; 403 } 404 else { 405 #ifdef _DEBUG 406 cout << "NO" << endl; 407 #endif 408 delete nv; 409 } 410 } 411 } 412 413 } 414 415 } 416 } 417 418 RegCloseKey(hKey); 419 } 420 421 return result; 422 } 423 // ***************************************************************************** 424 425 int fileExists(const std::wstring& path) { 426 WIN32_FIND_DATA ffd; 427 HANDLE hFind; 428 429 hFind = FindFirstFile(path.data(), &ffd); 430 if (hFind == INVALID_HANDLE_VALUE) 431 return FALSE; 432 433 FindClose(hFind); 434 return (ffd.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) == 0; 435 } 436 437 bool hasEnding(std::wstring const &fullString, std::wstring const &ending) { 438 if (fullString.length() >= ending.length()) { 439 return (0 == fullString.compare(fullString.length() - ending.length(), ending.length(), ending)); 440 } 441 else { 442 return false; 443 } 444 } 445 446 int wmain(int argc, wchar_t* argv[]) { 447 wchar_t buf[MAX_PATH]; 448 GetModuleFileName(NULL, buf, MAX_PATH); 449 std::wstring javafxhome = buf; 450 451 javafxhome.erase(javafxhome.rfind(L"\\")); 452 453 std::wstring fxlib = javafxhome + L"\\..\\lib\\"; 454 455 EnvironmentVariable java_home(L"JAVA_HOME"); 456 std::wstring javacmd; 457 std::wstring javahome; 458 459 if (java_home.exists()) { 460 javahome = java_home.get(); 461 javacmd = javahome + L"\\bin\\java.exe"; 462 std::wstring javaccmd = javahome + L"\\bin\\javac.exe"; 463 if (!fileExists(javacmd) || !fileExists(javaccmd)) { 464 javacmd = L""; 465 javahome = L""; 466 } 467 } 468 else { 469 javacmd = L""; 470 } 471 472 if (javacmd.length() <= 0) { 473 JavaVersion * jv2 = GetMaxVersion(HKEY_LOCAL_MACHINE, "SOFTWARE\\JavaSoft\\Java Development Kit"); 474 if (jv2 != NULL) { 475 javacmd = jv2->path; 476 javahome = jv2->home; 477 } 478 else 479 javacmd = L"java.exe"; 480 } 481 482 std::wstring cmd = L"\"" + javacmd + L"\""; 483 if (javahome.length() > 0) { 484 SetEnvironmentVariable(L"JAVA_HOME", javahome.c_str()); 485 } 486 487 std::wstring memory = L"-Xmx512M"; 488 std::wstring debug = L""; 489 std::wstring args = L""; 490 491 for (int i = 1; i < argc; i++) { 492 std::wstring argument = argv[i]; 493 std::wstring debug_arg = L"-J-Xdebug:"; 494 495 if (argument.find(L"-J-Xmx", 0) == 0) { 496 memory = argument.substr(2, argument.length() - 2); 497 } 498 else if (argument.find(debug_arg, 0) == 0) { 499 std::wstring address = argument.substr(debug_arg.length(), argument.length() - debug_arg.length()); 500 debug = L"-agentlib:jdwp=transport=dt_socket,server=y,suspend=y,address=" + address; | 392 cout << "NEW" << endl; 393 #endif 394 } 395 else { 396 if (nv != NULL) { 397 if (*nv > *result) { 398 #ifdef _DEBUG 399 cout << "REPLACE" << endl; 400 #endif 401 delete result; 402 result = nv; 403 } 404 else { 405 #ifdef _DEBUG 406 cout << "NO" << endl; 407 #endif 408 delete nv; 409 } 410 } 411 } 412 } 413 } 414 } 415 416 RegCloseKey(hKey); 417 } 418 419 return result; 420 } 421 // ***************************************************************************** 422 423 int fileExists(const std::wstring& path) { 424 WIN32_FIND_DATA ffd; 425 HANDLE hFind; 426 427 hFind = FindFirstFile(path.data(), &ffd); 428 if (hFind == INVALID_HANDLE_VALUE) 429 return FALSE; 430 431 FindClose(hFind); 432 return (ffd.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) == 0; 433 } 434 435 bool hasEnding(std::wstring const &fullString, std::wstring const &ending) { 436 if (fullString.length() >= ending.length()) { 437 return (0 == fullString.compare(fullString.length() - ending.length(), ending.length(), ending)); 438 } 439 else { 440 return false; 441 } 442 } 443 444 #define TRAILING_PATHSEPARATOR '\\' 445 446 std::wstring ExtractFilePath(std::wstring Path) { 447 std::wstring result; 448 size_t slash = Path.find_last_of(TRAILING_PATHSEPARATOR); 449 if (slash != std::wstring::npos) 450 result = Path.substr(0, slash); 451 return result; 452 } 453 454 std::wstring GetCurrentExecutableName() { 455 TCHAR FileName[MAX_PATH]; 456 GetModuleFileName(NULL, FileName, MAX_PATH); 457 return FileName; 458 } 459 460 int wmain(int argc, wchar_t* argv[]) { 461 wchar_t buf[MAX_PATH]; 462 GetModuleFileName(NULL, buf, MAX_PATH); 463 std::wstring javafxhome = buf; 464 465 javafxhome.erase(javafxhome.rfind(L"\\")); 466 467 std::wstring fxlib = javafxhome + L"\\..\\lib\\"; 468 469 EnvironmentVariable java_home(L"JAVA_HOME"); 470 std::wstring javacmd; 471 std::wstring javahome; 472 473 if (java_home.exists()) { 474 javahome = java_home.get(); 475 javacmd = javahome + L"\\bin\\java.exe"; 476 std::wstring javaccmd = javahome + L"\\bin\\javac.exe"; 477 if (!fileExists(javacmd) || !fileExists(javaccmd)) { 478 javacmd = L""; 479 javahome = L""; 480 } 481 } 482 else { 483 std::wstring exe = GetCurrentExecutableName(); 484 javacmd = ExtractFilePath(exe) + L"\\java.exe"; 485 } 486 487 if (javacmd.length() <= 0) { 488 JavaVersion * jv2 = GetMaxVersion(HKEY_LOCAL_MACHINE, "SOFTWARE\\JavaSoft\\Java Development Kit"); 489 if (jv2 != NULL) { 490 javacmd = jv2->path; 491 javahome = jv2->home; 492 } 493 else { 494 javacmd = L"java.exe"; 495 } 496 } 497 498 std::wstring cmd = L"\"" + javacmd + L"\""; 499 if (javahome.length() > 0) { 500 SetEnvironmentVariable(L"JAVA_HOME", javahome.c_str()); 501 } 502 503 std::wstring memory = L"-Xmx512M"; 504 std::wstring debug = L""; 505 std::wstring args = L""; 506 507 for (int i = 1; i < argc; i++) { 508 std::wstring argument = argv[i]; 509 std::wstring debug_arg = L"-J-Xdebug:"; 510 511 if (argument.find(L"-J-Xmx", 0) == 0) { 512 memory = argument.substr(2, argument.length() - 2); 513 } 514 else if (argument.find(debug_arg, 0) == 0) { 515 std::wstring address = argument.substr(debug_arg.length(), argument.length() - debug_arg.length()); 516 debug = L"-agentlib:jdwp=transport=dt_socket,server=y,suspend=y,address=" + address; |