Я задал связанный с ним вопрос (http://stackoverflow.com/questions/10969488/why-does-windows-spawn-process-sometimes-trigger-error-status-sxs-assembly-not-f), но Я боюсь, что его запутал сложность вопроса, так что вот очень простая версия:Как использовать _spawnvpe() с пользовательским значением PATH?
Вот пример вызова _spawnvpe, вручную передающего значение PATH.
Не работает. Это ошибки и не будет запускать блокнот.
Переход на _spawnv или отсутствие передачи значения PATH заставляет его работать. Однако в документации на _putenv четко указано, что формат для значения env равен KEY = VALUE.
Как это сделать?
Просьба указать конкретную информацию и предоставить либо полную, либо полную копию приведенного ниже кода, включая исправление.
#include <stdio.h>
#include <windows.h>
#include <process.h>
#include <errno.h>
int main(int argc, char *argv[]) {
char *path_value;
char buffer[4000];
const char *env[2];
const char *args[1];
char *command;
int result;
intptr_t procHandle;
path_value = getenv("PATH");
sprintf(buffer, "PATH=%s", path_value);
env[0] = buffer;
env[1] = NULL;
args[0] = NULL;
int offset = 0;
while (env[offset] != NULL) {
printf("env %d: %s\n", offset, env[offset]);
++offset;
}
offset = 0;
while (args[offset] != NULL) {
printf("arg %d: %s\n", offset, args[offset]);
++offset;
}
command = "C:\\windows\\system32\\notepad.exe";
procHandle = _spawnvpe(_P_NOWAIT, command, args, NULL);
if (procHandle == -1) {
printf("Failed to invoke command: %s\n", strerror(errno));
exit(1);
}
_cwait(&result, procHandle, 0);
if (result != 0)
printf("Command exited with error code %d\n", result);
}
Обязательно используйте отладочную сборку, она дает вам утверждение в этом коде. argv [0] не может быть NULL, он должен указывать на путь EXE. –
Вы даже не используете 'env' в представленном здесь' _spawnvpe' вызове. –