【发布时间】:2011-02-08 14:40:32
【问题描述】:
我在 Windows XP 上运行的 C 程序遇到问题,当它尝试调用 system() 时出现 Permission Denied (EACCES) 错误。
我在命令字符串中输入什么似乎并不重要,这些命令都是手动工作的,但是通过 system() 执行时会出现 Permission Denied 错误
另一件有趣的事是该程序在其他 XP 机器上也能正常工作,但不是这台机器。这让它感觉像是某种操作系统设置,但我不完全确定 system() 在后台做了什么,并且想了解这里发生了什么。
这是我的测试代码:
fprintf( stderr, "DEBUG: Running test of system(NULL) call...\n" );
if ( ( ret = system( NULL ) ) != 0)
fprintf( stderr, " DEBUG: ret: %d: errno: %d, %s\n", ret, errno, strerror( errno ) );
fprintf( stderr, "DEBUG: Running test of system(\"sleep 1\") call...\n" );
if ( ( ret = system( "sleep 1" ) ) != 0 )
fprintf( stderr, " DEBUG: ret: %d: errno: %d, %s\n", ret, errno, strerror( errno ) );
这会产生一个输出
DEBUG: Running test of system(NULL) call...
DEBUG: ret: 1: errno: 0, No error
DEBUG: Running Test of system("sleep 1") call...
DEBUG: ret: -1: errno: 13, Permission denied
谢谢。
更新:我还修改了我的代码以使用 CreateProcess() 而不是 system(),但我仍然收到“拒绝访问”错误 (5)。这使它听起来更像是一个操作系统设置,但我不知道在哪里看。
UPDATE2:进程监视器显示对路径“D:\cmd.exe”的“QueryOpen”调用失败,该路径不存在。所有其他调用都是针对 C:\WINDOWS\system32\cmd.exe,所以我不知道为什么一个调用是错误的。
【问题讨论】:
标签: c windows windows-xp