我的程序用CreateProcess调用另外的一个程序,
怪事就来,子进程打开文件总是失败,
单独执行子进程程序没有问题,
这是为什么?

解决方案 »

  1.   

    OK!
    A.Exe createprocess("B.exe");
    然后B.EXE fopen("de.txt")
    返回值总是NULL
      

  2.   

    你根据B.exe的输出知道返回值是NULL的吗?
    建议查看一下fopen对文件的打开方式,是不是需要指定文件的全路径名,因为不同的方法启动进程,该进程的当前目录可以不同
      

  3.   

    FILE *f = fopen("de.txt", "rb");
    if(f==NULL)
    {
       printf("Hello world");
    }
    打开方式没问题啊,并且子进程的current directory
    已经设到exe所在的目录了
      

  4.   

    打开文件失败有很多原因,一般可以归纳为两种,1、路径错误,2、访问权限非法(比如该文件已经被FILE_SHARE_READ打开,那再写打开就会失败)
      

  5.   

    我的程序中有一个计时器,
    没隔一段时间启动一下B.exe,
    发现第一次启动B.exe打开文件总是失败,以后就正常了。但是最近又在console下写了一个程序,也是用createprocess来启动B.exe,
    却没有文件,打开文件正常。这是为什么呢?
      

  6.   

    确认这个命令行参数真是这样传的
    B.EXE fopen("de.txt")
      

  7.   

    char* szCommandLine1 ="notepad resource.h";
    STARTUPINFO si = {sizeof(si)};
    PROCESS_INFORMATION pi;
    CreateProcess(NULL,szCommandLine1,NULL,NULL,false,NULL,NULL,NULL,&si,&pi);
    试试?
      

  8.   

    在打开文件之前先设置调用chdir,将当前的工作路径设置到文件所在的路径试试。
    因为我记得子进程的工作路径是继承了父进程的工作路径。