Как запустить 64-битное приложение Java из 32-битного приложения C++?

Я использую простую программу на C++ для запуска исполняемого файла .jar в 64-разрядной версии Windows 7. Я ожидал, что это выполнит 64-битную версию Java, но это не так, она выполняет 32-битную версию.

Я использую следующий код:

const char* javaw_path     = "javaw.exe";
const std::string memory   = "-Xmx" + user_configured_memory();
const char* jar            = "-jar";
const char* jar_file       = "\"HelloWorld.jar\"";
const std::string cli_args =  get_cli_args(argc, argv);

const char* args[] = {javaw_path, memory.c_str(),
       jar, jar_file, cli_args.c_str(), static_cast<char*>(NULL)};    

const int ret = execvp(javaw_path, args);

Когда приложение Java запускается, оно регистрирует архитектуру машины как «x86», а не «amd64», как ожидалось. Я получаю эту информацию, проверяя:

System.getProperty("os.arch")

Когда я запускаю ту же команду из командной строки, все работает так, как я ожидал — приложение java регистрирует «amd64».

Как я могу изменить свою программу запуска для запуска 64-битной Java?


person CodeBuddy    schedule 10.11.2011    source источник
comment
Может быть, у вас просто разные PATH? Ваш собственный PATH содержит 64-битный каталог java, в то время как 32-битное приложение наследует PATH с 32-битным каталогом java, поэтому сначала находит 32-битный javaw.exe и выполняет его?   -  person DejanLekic    schedule 11.11.2011
comment
Можете ли вы попытаться указать, какой javaw.exe вы хотите запустить, например. C:\\Program Files\\Java\\jdk1.7.0\\bin\\javaw.exe   -  person Peter Lawrey    schedule 11.11.2011


Ответы (1)


Если ваша программа на C++ 32-битная, вы не сможете этого сделать. Вы должны скомпилировать приложение C++ как 64-разрядное, а затем вы можете вызвать другое 64-разрядное приложение из исполняемого файла.

person Piotr Surma    schedule 19.01.2012