2010-08-18 6 views
1

나는 모두 ENV 변수에서 형성되고 결국 매개 변수 값두 경로에 공백이 있으면 C 프로그램의 파일로 외부 프로그램을 시작하는 방법은 무엇입니까?

 
start C:\Program Files\VideoLAN\VLC\vlc.exe C:\Documents and Settings\me\My Documents\My Music\09 - Track09.mp3 

시작되는 프로그램 및 파일 이름 경로와

int system(command) //in C:\Program Files\Microsoft Visual Studio 8\VC\crt\src\system.c) 

를 호출 VS2005로 기존의 C 프로그램을 해결하기 위해 노력하고있어 해당 명령이 char 버퍼의 시작 부분에 추가됩니다. ENV 변수는 다음과 같습니다

  • %VLCPATH% 값을 내가 XP 명령 프롬프트와 모든 것을이 노력했습니다 C:\Documents and Settings\me\My Documents\My Music

을 가지고 값이 C:\Program Files\VideoLAN\VLC

  • %MUSIC% 잘 작동이있는 경우 경로 공백이 없어야합니다. 또한 작동합니다 :

    "%VLCPATH%\vlc.exe" "%MUSIC%\09 - Track09.mp3" 
    

    그럼 어떻게해야합니까?

    1. 편집 env 변수에 따옴표가 있습니까? (그렇게 생각하지 마라)
    2. 명령에 매개 변수 file가 있는지 확인한 다음 어떻게 든 이스케이프 문자가있는 따옴표를 어쩌면 둘 다 추가하고 start라는 단어를 제거합니까?
    3. 는 시작 프로그램 경로를 모두 뭔가 분별/I는 윈도우에서
  • +1

    'system()'대신'execv()'를 사용할 수 있습니까? Windows에서의 까다로운 부분은'fork()'입니다. 그러나 'shell'('cmd.exe')을 피하는 것이 아마도 최선의 방법 일 것입니다. –

    +0

    일반적으로 항상 명령을 인용해야합니다. 실행 파일 자체와 경로 인 모든 매개 변수를 인용하십시오. – Luke

    +0

    @jonathan : 미안하지만 완전히 이해하지 못했습니다. 나는이 execv에 대해 알아야한다. ... @ 루크 : 그래서 시작 부분을 제거하고 따옴표가 포함되도록 일부 이스케이프 문자로 "문자열"을 조작해야합니까? –

    답변

    2

    나는 예를 들어, 모든 매개 변수를 인용하려고 할 것입니다 :

    int main(int argc, char *argv[]) 
    { 
        char command[1024]; 
        char *title = "test vlc"; 
        char *executable = "vlc.exe"; 
        char *param = "09 - Track09.mp3"; 
    
        snprintf(command, sizeof(command), "start \"%s\" \"%s\" \"%s\"", 
          title, executable, param); 
        printf("%s\n", command); 
        system(command); 
    
        return EXIT_SUCCESS; 
    } 
    

    은 분명히 당신이 당신의 실행 파일과 PARAMS을 결정 그러나와 실행 파일과 PARAM 교체합니다.

    +0

    XP 명령 프롬프트에서 작동하지 않는다 : Media Player 인 기본 프로그램 인 Track09.mp3을 09부터 시작한다. start (vlc 프로그램)의 첫 번째 매개 변수를 무시합니다. –

    +0

    죄송합니다.하지만이 코드를 사용하기 위해 몇 가지 사항을 변경해야합니다. 그러나 명령 프롬프트는

     start "C:\Program Files\VideoLAN\VLC\vlc.exe" "C:\Documents and Settings\me\My Documents\My Music\09 - Track09.mp3" 

    +0

    @matti를 허용하지 않습니다. "시작"명령의 첫 번째 매개 변수는 실행 파일이 아니라 창 제목입니다. 솔루션을 업데이트 했으므로 시도해보고 작동 여부를 알려주십시오. –

    1

    의 인식 아니에요 우아한 할 및 경로 이름과 인수는 경우 ("이 같은") 따옴표로 묶어야합니다 그들은 공백을 포함합니다. Track09.mp3 "

    - 내 문서 09 \ 내 음악 \ \ 문서 및 설정 \ 나를 : \

    "C : \ 프로그램 파일 \가 VideoLAN \ VLC \의 vlc.exe ""C 예를 들어

    +0

    thanks. 그러나 시작은 어떨까요?이 "문자열"의 시작 부분에 시작과 함께 할 수 있습니까 ?? –

    +0

    이것은 XP 명령 프롬프트에서 작동하지 않습니다 : Media Player 인 기본 프로그램이있는 09 - Track09.mp3을 시작합니다. start (vlc 프로그램)의 첫 번째 매개 변수를 무시합니다. –

    +0

    죄송합니다, "start"이 (가) 제거되었습니다. 따옴표 (파일 인수)의 두 번째 부분은 이제 단일 명령 줄 인수로 vlc.exe로 전달됩니다. – Peladao

    관련 문제