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

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应该是什么?

我怎么可以传递一个文件目录(path)作为参数?

如何从命令行使用参数启动存储在UNC共享中的程序?

在Windows命令行上运行PHP脚本时,无法findPDO ODBC连接的驱动程序错误

用cmd或java运行Omnet ++ Simulation

我怎么可以添加添加文本在每一行的开始?

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

任何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,TRUE,// 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?

如何用命令启动Unix屏幕命令?

如何用whatif标志运行sdelete

一个命令的输出redirect到多个命令

PowerShell从命令行参数中剥离双引号

Git合并另一个远程分支

运行进程时会继承环境变量,包括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%system32Wbem

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

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

相关推荐