微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何使用具有自定义PATH值的_spawnvpe?

我已经问过一个相关的问题(http://stackoverflow.com/questions/10969488/why-does-windows-spawn-process-sometimes-trigger-error-status-sxs-assembly-not-f)但我'恐怕它会因为问题的复杂性而变得混乱,所以这里有一个非常简单的版本:

这是一个调用_spawnvpe手动传递PATH值的例子。

它不起作用。 它错误,不会运行记事本。

更改为_spawnv或不传递PATH值使其工作。 但是,_putenv的文档明确指出env值的格式为KEY = VALUE。

电子错误:包装后的应用程序; 错误:产生C: Windows system32 cmd.exe ENOENT

为什么微软的_wspawnv返回EINVAL?

如何产生不会与父母一起死亡的儿童stream程?

如何从PHPasynchronous执行应用程序

如何在当前的login会话中检查程序是否已经被执行? (视窗)

我如何使它工作?

请具体说明,并提供以下代码的差异或完整副本,包括修正。

#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: %sn",offset,env[offset]); ++offset; } offset = 0; while (args[offset] != NULL) { printf("arg %d: %sn",args[offset]); ++offset; } command = "C:\windows\system32\notepad.exe"; procHandle = _spawnvpe(_P_NowAIT,command,args,NULL); if (procHandle == -1) { printf("Failed to invoke command: %sn",strerror(errno)); exit(1); } _cwait(&result,procHandle,0); if (result != 0) printf("Command exited with error code %dn",result); }

简单的代码在C崩溃中产生一个进程。 为什么?

与期望产卵的pipe输出

在Node JS上产生(Windows Server 2012)

tcl:执行一个Windows命令行并查看应用程序的“stream”

当shell被终止时,在Windows上产生的Ruby进程死亡

它适用于我以下代码(只显示更改的行):

... const char *args[2]; ... args[0] = "notepad.exe"; args[1] = NULL; ... procHandle = _spawnvpe(_P_NowAIT,env); ...

Visual Studio 2010,Windows HPC server 2008 R2。

请注意,Windows在PATH中搜索程序和动态库,与大多数具有可执行文件和库路径单独变量的Unix系统不同。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐