2017-01-10 6 views
0

Я использую приложение C++ для запуска другого процесса. Этот процесс является Java, поэтому мне нужно запустить javaw.exe. Однако я хочу, чтобы мое приложение работало в любой системе Windows с установленной совместимой версией java и в пути поиска Windows.C++ Поиск исполняемого файла через путь поиска Windows

Я запускаю свой процесс с помощью CreateProcess, однако для первого аргумента требуется полный путь к исполняемому файлу и не ищет путь поиска Windows.

Я хотел бы найти полный путь javaw.exe из пути поиска Windows в моем CPP-коде, чтобы затем перейти к CreateProcess, чтобы я мог начать правильно, а затем через TerminateProcess. Остановите внешнюю программу.

Как найти полный путь javaw.exe через путь поиска по Windows?

Редактировать: этот вопрос отличается. чем ссылочный дубликат, потому что мой конкретный вопрос состоит в том, чтобы использовать путь поиска Windows (который, кстати, включает локальный каталог, PATH env и некоторые стандартные местоположения). И я хочу сделать это с помощью CPP. Я специально хочу использовать систему поиска окон, так как у пользователей может быть несколько javaw.exe, и я хочу, чтобы какой-либо из них был предсказуемым с помощью стандартных путей поиска Windows, а не с помощью специального метода поиска, который я реализую.

+1

Возможный дубликат [Как найти, где установлен javaw.exe] (http://stackoverflow.com/questions/17602113/how-to-find- где-javaw-exe-is установлен) –

+0

Если по пути поиска Windows вы имеете в виду PATH, то вы должны иметь возможность получить путь и извлечь местоположение Java, я думаю. Иногда есть также набор JAVA_HOME, который вы также можете использовать. – Rakete1111

+0

Это не дубликат, поскольку я пытаюсь сделать это через C++ через путь поиска Windows. Эта проблема была независимой от языка и хотела найти ее любым возможным способом. Идеальным решением будет функция cpp "where" или "which", которая возвращает соответствующий EXE-путь. – Jim

ответ

1

Существует функция Win32 API под названием SearchPath, которая (в зависимости от параметров реестра) сначала ищет локальный каталог, а затем переменную PATH. Вы можете дополнительно добавить другой каталог для поиска. Более подробную информацию можно найти в разделе the documentation on MSDN.

Вот несколько примеров кода:

LPSTR lpFilePart; 
char filename[MAX_PATH]; 

if(!SearchPath(NULL, "javaw", ".exe", MAX_PATH, filename, &lpFilePart)) 
{ 
    //error handling here 
} 

std::cout<<"The path is " << filename<<std::endl;