Запустить программу по PATH env. вар. с правильным рабочим каталогом

Я просто попытался запустить новый процесс, разрешив его местоположение с помощью PATH env. вар. Так как я использую Qt, это означает, что я добавил

X: \ папка \

к моей переменной PATH и в моем стартовом приложении я звоню

QProcess :: startDetached ( «test.exe»)

который на самом деле работает.

Однако test.exe записывает данные в свой рабочий каталог. Эти данные попадают в каталог начального приложения вместо X: \ folder \, а это не то, что мне нужно.

Я проверил поведение непосредственно в командной строке Windows, набрав «test.exe» в CLI, и там тоже самое (данные записаны в текущий каталог).

Есть ли способ (в C ++ или командной строке) запустить процесс с использованием PATH, а также использовать каталог, найденный в PATH, в качестве рабочего каталога нового процесса?

Я мог бы найти в PATH свой собственный, проанализировать обнаружение и запустить программу с помощью другой перегрузки QProcess :: startDetached (), но мне интересно, есть ли более простой способ.

0

Решение

Есть как минимум 3 варианта без сложных настроек.

1 — Из вашего вызывающего приложения смените текущий каталог на тот, где ваш test.exe Программа находится. Таким образом, файлы будут идти в нужный каталог. НО тогда возможно, что вызывающее приложение будет иметь проблемы или генерировать выходные данные там, где это не должно быть, поэтому необходимо новое изменение текущего каталога в вызывающем приложении.

2 — передать в качестве параметра к вашему test.exe где он должен генерировать свои файлы.

3 — Определитесь с вашим test.exe где он находится и используйте эту информацию, чтобы изменить текущий каталог для этого процесса или, зная путь, сгенерировать файлы в том же каталоге, в котором он находится.

TCHAR szPath[MAX_PATH];

if( !GetModuleFileName( NULL, szPath, MAX_PATH ) ) {
// handle error in GetModuleFileName
} else {
// now, szPath contains file path
};

Это стандартный способ получения местоположения текущего процесса в Windows. Ссылка здесь: GetModuleFileName

0

Другие решения

ОС не будет «перемещаться в текущий каталог» при использовании пути. Вам придется сделать это самостоятельно. (В большинстве случаев вам бы не хотелось, чтобы приложение перемещалось в другой каталог — что, если компилятор сделает это, когда вы gcc foo.c — тогда вам придется передать полный путь ко всему, так как вы, конечно, не хотите помещать свои исходные файлы туда, где живет компилятор — во многих случаях вы, вероятно, даже не можете записать в этот каталог в Unix / Linux система).

Вам нужно будет либо добавить правильную папку [и я предположил бы, что использование каталога установки приложений может быть не лучшим местом!], Либо сделать chdir(...) изменить текущий рабочий каталог, где вы хотите, чтобы данные были. Большинство приложений (которые используют принцип хранения файлов в определенном месте, подобном этому) хранят «каталог по умолчанию» в настройке где-то, чтобы пользователь мог изменить настройку в соответствии со своими настройками.

1

По вопросам рекламы [email protected]