вызвать exe из c ++ (windows) - PullRequest
       4

вызвать exe из c ++ (windows)

3 голосов
/ 30 августа 2010

Я использую VS2010, и я хотел бы вызвать исполняемый файл, который я создал в другом каталоге.Я пробовал следующее:

int main(){

 system("C:\\Users\\Li\\Desktop\\Debug\\modelExample_4pcs.exe");     
     return 0;
};

но я получаю сообщение об ошибке «Системе не удалось найти указанный файл».

Я пытался запустить exe-файл непосредственно из командылинии, и это работает только тогда, когда я нахожусь в его каталоге.Не могли бы вы сказать мне, как я могу запустить его из другого каталога?

(я использую win7)

Спасибо, Ли.

Ответы [ 9 ]

5 голосов
/ 30 августа 2010

Вы должны попробовать использовать функцию CreateProcess Windows API: http://msdn.microsoft.com/en-us/library/ms682425%28VS.85%29.aspx

3 голосов
/ 30 августа 2010

Попробуйте открыть файл для чтения, просто чтобы убедиться, что у вас есть правильный путь:

char* filename = "C:\\Users\\Li\\Desktop\\Debug\\modelExample_4pcs.exe" ;
FILE* fp = fopen (filename, "rb") ; // Open for reading, binayr mode
if (fp == 0) {
  printf ("Duh! File not found\n") ;
  exit (0) ;
  }
printf ("File found\n") ;
fclose (fp) ;

// Now try the system call, as before:
system(filename);

Что происходит?

2 голосов
/ 30 августа 2010

Вы должны иметь возможность использовать ShellExecute следующим образом: (корректировка параметров, отправляемых в ShellExecute для вашей ситуации) http://msdn.microsoft.com/en-us/library/bb762153(VS.85).aspx?ppud=4

HINSTANCE hinst = ShellExecute( NULL, _T("open"), commandLine.c_str(), additionalParams.c_str(), NULL, SW_RESTORE );

if(hinst <= (HINSTANCE)SHELLEXERROR)// see: http://msdn2.microsoft.com/en-us/library/bb762153.aspx for further info on the return values

Теперь, когда вы используете Win7, у вас может быть проблема с привилегиями, и вам нужно работать на повышенном уровне (например, администратор), вы можете проверить это, открыв cmd от имени администратора и запустив ваш exe из другого каталога

и, как уже упоминал Стив, вы, безусловно, можете использовать CreateProcess.

НТН,

EB

1 голос
/ 30 августа 2010

Попробуйте это с помощью CreateProcess.Меньше (или, по крайней мере, разных) зависимостей от среды, чем при использовании system ().По крайней мере, вы получите хороший код ошибки Win32, если это все еще не удается.

http://msdn.microsoft.com/en-us/library/ms682425(VS.85).aspx

1 голос
/ 30 августа 2010

Система () может не найти cmd.exe, чтобы открыть вашу среду. Попробуйте использовать cmd.exe для запуска приложения с помощью параметра / C.

System("C:\\WINDOWS\\system32\cmd.exe /C \"C:\\Users\\Li\\Desktop\\Debug\\modelExample_4pcs.exe\"");
0 голосов
/ 31 августа 2010

Сначала перейдите в каталог, как в командной строке:

system("C: && CD \\Users\\Li\\Desktop\\Debug\\ && modelExample_4pcs.exe"); 
0 голосов
/ 30 августа 2010

modelExample_4pcs.exe пытается загрузить другой файл из текущей рабочей папки, и это вызывает ошибку?

Возможно, попробуйте chdir () перед вызовом system ().

0 голосов
/ 30 августа 2010

Ошибка при запуске основной программы, а не при запуске modelExample_4pcs.exe? Попробуйте закомментировать системный вызов () и посмотрите, не появляется ли такая же ошибка.

Ваша основная программа не находится в пути, когда вы находитесь вне ее папки ...

0 голосов
/ 30 августа 2010

Проверьте свой путь и убедитесь, что вы экранировали все символы: C:\\Users\Li..

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...