COMSPEC和PATH环境variables应该使用system()来定位命令解释器?

操作系统(XP)的环境variables是否在从Visual Studio .NET C ++运行的进程中使用?

看来命令解释器没有find:
当使用NULL作为命令时, system()返回0,并且使用命令ENOENT Command interpreter cannot be found

Windows(System-> Environmental Variables)中,COMSPEC包含cmd.exe的path
PATH没有。

PATH应该是什么?

除此之外,不知道为什么找不到解释器。

任何build议表示赞赏。 谢谢。

  if( system("tail -500 log.txt") == -1) { //Error calling tail.exe on log //errno is a system macro that expands int returning //the last error. strerror() converts the error to it's //corresponding error message. printf("Error calling tail.exe with system(): %s",strerror( errno )); } 

EDIT1
进入system() argv[0] = _tgetenv(_T("COMSPEC")); 返回一个错误的指针。 由于这是一个cgi可执行文件,COMPSEC没有正确设置或从操作系统inheritance。
现在我在启动过程之前设置COMSPEC,并使用CreateProcess(),如例2所示

但是,创build进程仍然返回0? 越来越近。 看到这个问题? 谢谢。

  if (! SetEnvironmentVariable("COMSPEC", "C:\\WINDOWS\\system32\\cmd.exe") ) { printf("SetEnvironmentVariable failed (%d)\n", GetLastError()); } //r = system("dir c:\\"); r = CreateProcess("dir.exe", NULL, NULL, NULL, TRUE, NULL, NULL, // inherit parent's environment NULL, &si, &pi); 

编辑2
SetEnvironmentVariable()不起作用。 但是,putenv呢。
_putenv( "COMSPEC=C:\\WINDOWS\\system32\\cmd.exe" ); // C4996
不知道有什么区别…?
现在,这个env var被设置,从浏览器的cgi应用程序的任何请求给出的选项来保存cgi.exe而不是执行它..不知道为什么这已经改变基于这个env var?

运行进程时会继承环境变量,包括system(...)调用。 除非有什么奇怪的事情发生,否则通常运行%windir%\ system32 \ cmd.exe应该这样做,它应该扩展环境变量,除非您可以使用API​​来获取Windows目录“ GetWindowsDirectory ”。 在这里看到一个来自MSDN的例子。

编辑: IIRC,COMSPEC环境变量,如果在命令行上完成

 > echo%COMSPEC%
 C:\ WINDOWS \ SYSTEM32 \ CMD.EXE

你有一个坏的指针,因为它可能没有设置,上面的回声命令应该证明,如果你没有输出,它没有设置,右键单击“我的电脑”,左键单击“属性”,一个出现标签页的对话框,点击“高级”,找到“环境变量”…看到这里的两个截图…

另外我应该指出,你是临时设置环境变量,因此它不会看到'COMSPEC'….它不是永久的,唯一的永久性的方法是按照屏幕截图…

我正在尝试获取截图…

替代文字http://img706.imageshack.us/img706/9434/envvars.png

替代文字http://img638.imageshack.us/img638/5743/comspec.png

编辑#2:只要指出这一点,当你在这里设置环境变量,这是暂时的 – 不是永久的!

如果(!SetEnvironmentVariable(“COMSPEC”,“C:\\ WINDOWS \\ system32 \\ cmd.exe”))
  {
     printf(“SetEnvironmentVariable失败(%d)\ n”,GetLastError());         
  }

  // r = system(“dir c:\\”);
  r = CreateProcess(“dir.exe”,NULL,NULL,NULL,TRUE,NULL, 
     NULL,//继承父级的环境 
     NULL,&si,&pi);

当使用调用CreateProcess ,它肯定会失败,查看注释“inherit parent's environment”,这是暂时无法建立的环境。 你在这里测试了简单的回声命令吗? 什么是错误的,为什么COMSPEC变量没有设置..永久设置后 – 你将需要重新启动机器的工作。 然后,上面的echo命令应该显示该环境变量的值,并依次显示该值

 argv [0] = strdup(_tgetenv(_T(“COMSPEC”)));

应该返回一个适当的指针…顺便说一句,我认为这应该是'd也…

编辑#3 :我注意到,当我使用'&pi'的时候,它是作为一个pi符号代替的!呃,现在已经修改了…我也修改了这个'argv'代码:

 argv [0] = _tcsdup(_tgetenv(_T(“COMSPEC”)));

希望这有助于,最好的问候,汤姆。

开始+控制面板,系统,高级,环境变量。 在系统变量部分中选择编辑。 至少应该是这样的:

 %SystemRoot%\system32;%SystemRoot%;%SystemRoot%\System32\Wbem 

在superuser.com上询问更多的问题