파라미터로 외부 프로그램을 호출하는 방법은?
코드 자체 내에서 매개변수가 결정된 내 코드 내 윈도우 프로그램을 호출하고 싶습니다.
외부 기능이나 메서드를 호출하는 것이 아니라 WinXP 환경 내의 실제 .exe 또는 batch/script 파일을 호출하려고 합니다.
C 또는 C++가 선호되는 언어이지만 다른 언어(ASM, C#, Python 등)에서 더 쉽게 할 수 있다면 알려주세요.
CreateProcess(), System() 등을 호출할 때 파일 이름 및/또는 정규화된 경로에 공백이 있는 경우 파일 이름 문자열(명령 프로그램 파일 이름 포함)을 이중으로 따옴표로 지정해야 합니다. 그렇지 않으면 파일 이름 경로의 일부가 명령 인터프리터에 의해 별도의 인수로 구문 분석됩니다.
system("\"d:some path\\program.exe\" \"d:\\other path\\file name.ext\"");
Windows의 경우 CreateProcess()를 사용하는 것이 좋습니다.더 엉망인 설정을 가지고 있지만 프로세스가 시작되는 방법을 더 잘 제어할 수 있습니다(그렉 휴길의 설명에 따르면).빠르고 더러운 경우 WinExec()을 사용할 수도 있습니다.(시스템()은 UNIX로 휴대 가능).
배치 파일을 시작할 때 cmd.exe(또는 command.com )를 사용하여 시작해야 할 수도 있습니다.
WinExec("cmd \"d:some path\\program.bat\" \"d:\\other path\\file name.ext\"",SW_SHOW_MINIMIZED);
(또는SW_SHOW_NORMAL
명령 창을 표시하려면 ).
Windows(윈도우)는 시스템 PATH에서 command.com 또는 cmd.exe를 찾을 수 있으므로 의 파일 이름을 완전하게 지정할 필요는 없습니다. 단, C를 사용하지 마십시오.\Windows\system32\cmd.exe).
C++ 예제:
char temp[512];
sprintf(temp, "command -%s -%s", parameter1, parameter2);
system((char *)temp);
C# 예제:
private static void RunCommandExample()
{
// Don't forget using System.Diagnostics
Process myProcess = new Process();
try
{
myProcess.StartInfo.FileName = "executabletorun.exe";
//Do not receive an event when the process exits.
myProcess.EnableRaisingEvents = false;
// Parameters
myProcess.StartInfo.Arguments = "/user testuser /otherparam ok";
// Modify the following to hide / show the window
myProcess.StartInfo.CreateNoWindow = false;
myProcess.StartInfo.UseShellExecute = true;
myProcess.StartInfo.WindowStyle = ProcessWindowStyle.Maximized;
myProcess.Start();
}
catch (Exception e)
{
// Handle error here
}
}
윈도우 API에서 CreateProcess 기능을 찾으시는 것 같습니다.실제로 관련 전화가 있지만 이를 통해 시작할 수 있습니다.그것은 아주 쉽습니다.
이를 위한 가장 간단한 방법 중 하나는system()
런타임 라이브러리 함수입니다.매개 변수로 단일 문자열을 사용합니다(보다 매개 변수 수가 적음).CreateProcess
!) 를 입력한 것처럼 실행합니다.system()
또한 프로세스가 반환되기 전에 프로세스가 완료될 때까지 자동으로 기다립니다.
다음과 같은 제한도 있습니다.
- 런칭 프로세스에서 stdin과 stdout에 대한 통제력이 떨어집니다.
- 다른 프로세스가 실행되는 동안에는 다른 작업을 수행할 수 없습니다(예: 삭제 결정).
- 다른 프로세스를 쿼리하기 위해 다른 프로세스에 대한 핸들을 얻을 수 없습니다.
는 합니다 합니다.exec*
들()execl
,execlp
,execle
,execv
,execvp
더 하는
가 Win32에 됩니다.CreateProcess
기능을 합니다. 기능을 통해 유연성을 극대화할 수 있습니다.
간단한 c++ 예제(몇 개의 웹 사이트를 검색한 후 발견됨)
#include <bits/stdc++.h>
#include <cassert>
#include <exception>
#include <iostream>
int main (const int argc, const char **argv) {
try {
assert (argc == 2);
const std::string filename = (const std::string) argv [1];
const std::string begin = "g++-7 " + filename;
const std::string end = " -Wall -Werror -Wfatal-errors -O3 -std=c++14 -o a.elf -L/usr/lib/x86_64-linux-gnu";
const std::string command = begin + end;
std::cout << "Compiling file using " << command << '\n';
assert (std::system ((const char *) command.c_str ()) == 0);
std::cout << "Running file a.elf" << '\n';
assert (std::system ((const char *) "./a.elf") == 0);
return 0; }
catch (std::exception const& e) { std::cerr << e.what () << '\n'; std::terminate (); }
catch (...) { std::cerr << "Found an unknown exception." << '\n'; std::terminate (); } }
언급URL : https://stackoverflow.com/questions/486087/how-to-call-an-external-program-with-parameters
'programing' 카테고리의 다른 글
open_files_limit Centos 7 + MariaDB 10.2 - 상한 65536 (0) | 2023.10.09 |
---|---|
ng급 지시를 받아 활기찬 (0) | 2023.10.09 |
콜백_핸들러는 WooCommerce를 해고하지 않습니다. (0) | 2023.10.09 |
Symfony2의 웹 디렉토리로 가는 서버 경로를 컨트롤러 내부에서 가져오는 방법은? (0) | 2023.10.09 |
난수 생성을 시드하는 데 시간을 사용하는 대안이 있습니까? (0) | 2023.10.09 |