Проблема с lpCommandLine в CreateProcess () - PullRequest
0 голосов
/ 16 октября 2011

arg У меня есть некоторый код:

CreateProcess(L"D:\\prog\\forLb1SPZ.exe",L"D:\\prog\\forLb1SPZ.exe D:\\1.txt",NULL,NULL,FALSE,0,NULL,NULL,&si,&pi)

Этот код работает, НО ... файл создается рядом с программой (где написан этот код) и имеет имя "D" - первый символARGV [1].Что не так?

Код в forLb1SPZ.exe

#include "stdafx.h"
#include "iostream"
#include <stdio.h>
#include <math.h>
using namespace std;

int _tmain(int argc, char* argv[])
{
    int value;
  FILE *Ptr;

  Ptr=fopen("argv[1]","w");

  for(int i=0;i<20000;i++){
      value=rand();
    fprintf(Ptr,"%d i=%d \n",value,i);
  }

  fclose(Ptr);
    return 0;
}

Код в lab2SPZ.exe (основная программа)

#include "stdafx.h"
#include "iostream"
#include <windows.h>
#include <stdio.h>
using namespace std;

int main()
{
STARTUPINFO si;
PROCESS_INFORMATION pi;
ZeroMemory(&si, sizeof(si));
si.cb = sizeof(si);
ZeroMemory(&pi, sizeof(pi));

if(!CreateProcess(L"D:\\forLb1SPZ.exe","D:\\forLb1SPZ.exe D:\\1.txt",NULL,NULL,FALSE,0,NULL,NULL,&si,&pi))
{printf( "creating fail\n");system("pause");return 0;}




printf("handle: %X\n", pi.hProcess);
WaitForSingleObject( pi.hProcess, INFINITE );


system("pause");
return 0;
}

1 Ответ

2 голосов
/ 17 октября 2011

Вы уверены, что CreateProcess создает этот файл, а не forLb1SPZ.exe?

Примечание:

  1. Вы используете широкие строки. Если forLb1SPZ.exe использует строки ANSI, он может увидеть \ 0 после D. Если он, скажем, откроет «D: \ 1.txt», он может увидеть имя файла как «D» (я не уверен на этом, но я представляю, что ОС не конвертирует кодировку. Я могу ошибаться, и это так). Попробуйте использовать CreateProcessA и посмотрите, есть ли разница.
  2. Второй аргумент должен быть LPTSTR, а не LPCTSTR. Вы передаете строковый литерал, и в соответствии с документами эта строка может быть изменена на CreateProcess. Если это произойдет, у вас будет неопределенное поведение и, возможно, сбой.
  3. Вы передаете имя приложения в первом и втором аргументах. Это обычно избыточно. Это намеренно?
...