Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Общие вопросы > Ошибка, не могу понять какая...


Автор: np9mi7 21.7.2004, 16:38
Добрый день...

У меня небольшая проблемка...

Есть код
Цитата

#include <windows.h>
#include <conio.h>
//-----------------------------------------------
int main(int argc,char* argv[])
{
//------------------------------------------
//то что нужно процессу 
STARTUPINFO si;
PROCESS_INFORMATION pi;
GetStartupInfo(&si);
//------------------------------------------
  //создаем сам процесс
  if(!CreateProcess(
  "c:\\arc\\arj32.exe",
  " a -r -y name c:\arc",
  NULL,
  NULL,
  FALSE,
  0,
  NULL,
  NULL,
  &si,
  &pi))
  {
  //ошибка при запуске
  exit(0);
  }
//-------------------------------------------
getch();
//-------------------------------------------
return 1;
}


Ну так вот при этом запуске архиватор выдает ошибку
Цитата

invalid command: name


Самое прикольное в том, что при запуске того же самого из коммандной строки все в норме

Цитата

c:\arc\arj32.exe a -r -y name c:\arc


Те все работает и корректно архивируется...
Я уверен на 100%, что это касяк со вторым параметром функции....Только какой??? МОжет я что-то ни так делаю???

Заранее благодарен за помощь...

Автор: _hunter 21.7.2004, 16:41
c:\\arc

Автор: np9mi7 21.7.2004, 16:53
Неа...

Не в этом дело....
Если так то просто ничего не запускается....(в смысле вообще сам процесс)..

У меня проблема вдругом, процесс запускается, вот только параметры я ему каряво передаю...Только понять бы эту карявость...

Автор: _hunter 21.7.2004, 16:58
вот именно что коряво -- ты ему один бэк-слэш недодаеш
и что значит "просто ничего не запускается"? какую ошибку дает?
ты пишеш так:

Код
CreateProcess(
 "c:\\arc\\arj32.exe",
 " a -r -y name c:[b]\\[/b]arc",
 NULL,
 NULL,
 FALSE,
 0,
 NULL,
 NULL,
 &si,
 &pi)

?

Автор: p0s0l 21.7.2004, 23:19
Попробуй так:
Код

if(!CreateProcess(
 NULL,
 "c:\\arc\\arj32.exe a -r -y name c:\\arc",

а может name не надо ?...

Автор: Borisff2003 22.7.2004, 05:23
У меня в проге так
Код

//создаем сам процесс
 if(!CreateProcess(
 NULL,
 "c:\\arc\\arj32.exe a -r -y name c:\\arc",
 NULL,
 NULL,
 FALSE,
 0,
 NULL,
 NULL,
 &si,
 &pi))
 {
 //ошибка при запуске
 exit(0);
 }


из мсдн по поводу первого параметра
Windows NT/2000/XP: If the executable module is a 16-bit application, lpApplicationName should be NULL, and the string pointed to by lpCommandLine should specify the executable module as well as its arguments.

Автор: _hunter 22.7.2004, 16:20
да но arj32 вряд ли 16-ти битное приложение wink.gif

Автор: np9mi7 22.7.2004, 17:34
Кстати вариант:
Цитата

/создаем сам процесс
if(!CreateProcess(
NULL,
"c:\\arc\\arj32.exe a -r -y name c:\\arc",
NULL,
NULL,
FALSE,
0,
NULL,
NULL,
&si,
&pi))
{
//ошибка при запуске
exit(0);
}


Заработал...
Правда теперь появилось вопросов еще больше....

1)Почему не работает мой первый вариант корректно??? Не понятно что передается коммандной строке при вызове:
Цитата

//создаем сам процесс
  if(!CreateProcess(
  "c:\\arc\\arj32.exe",
  " a -r -y name c:\\arc",
  NULL,
  NULL,
  FALSE,
  0,
  NULL,
  NULL,
  &si,
  &pi))
  {
  //ошибка при запуске
  exit(0);
  }

2)как запускаются процессы(одновременно или идут один за другим)???
При вызове:
Цитата

//создаем сам процесс
  if(!CreateProcess(
  "c:\\arc\\arj32.exe",
  " a -r -y name c:\\arc",
  NULL,
  NULL,
  FALSE,
  0,
  NULL,
  "c:\\arc",
  &si,
  &pi))
  {
  //ошибка при запуске
  exit(0);
  }
CopyFile("c:\\arc\\name.arj","c:\\save\\name.arj",true);


Насколько я понимаю это происходит одновременно...То тогда как zделать так чтобы они шли последовательно???

Просто мне нужно написать что-то типа:
архивируем->закончили архивировать->откопировали созданный архив->закончили->опять архивируем.....

Заранее благодарен за помощь...

Автор: _hunter 22.7.2004, 17:44
на первый вопрос ты и сам можеш ответить smile.gif -- напиши консольное приложение и посмотри что ему передается

для ожидания завершения процесса можно использовать WaitForSingleObject(pi.hProcess,INFINITE);
-- фунция _выполнится_ только по завершению процесса

Автор: np9mi7 22.7.2004, 17:46
При таком запуске не выводиться на экран то что я передаю...

Или что другое имеешь в виду???

Автор: _hunter 24.7.2004, 11:21
а ты выведение на экран параметров сделал?
примерно так:
Код
//---------------------------------------------------------------------------

#include <windows.h>
#pragma hdrstop

//---------------------------------------------------------------------------

#pragma argsused
WINAPI WinMain(HINSTANCE, HINSTANCE, LPSTR lpCmdLine, int nCmdShow)
{
   MessageBox(NULL, lpCmdLine, "", MB_OK);

   return 0;
}
//---------------------------------------------------------------------------

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)