2013-05-31 2 views
0

Winforms 앱 (C++/cli)에서 기본 Windows 사운드 레코드를 시작하고 싶습니다. "실행"대화 상자에서 Vista/7 명령은 "사운드 레코더"입니다.Windows 사운드 레코더 앱 실행

System::Diagnostics::Process::Start("soundrecorder"); 

을하지만 그것은 System.ComponentModel.Win32Exception (메시지 : 지정한 파일을 찾을 수 없습니다) 발생 : 그래서 가장 쉬운 방법은 시작되었다. 그래서 나는 실제 경로를 사용했습니다 :

String^ path = Environment::GetFolderPath(Environment::SpecialFolder::System); 
path = System::IO::Path::Combine(path, "soundrecorder.exe"); 
System::Diagnostics::Process::Start(path); 

같은 결과입니다. 하드 코딩 전체 경로도 실패합니다. "mspaint"와 같은 다른 명령은 올바르게 실행됩니다.

내 환경/현재 사용자/컴퓨터에 문제가 있다고 생각했습니다. 그럼 C#으로 바보 같은 프로그램을 작성 :

public abstract class StupidProgram{ 
    public static void Main(string[] args) 
    { 
    Process.Start("soundrecorder"); 
    } 
} 

그것은 작동하고, 더 : 내 응용 프로그램에서 "StupidProgram.exe"를 실행하면, 너무 작동합니다.

응용 프로그램은 C++/CLI에서 32 비트 프로그램으로 코딩되어 있습니다. Windows 7 64 비트에서 작업하고 있습니다. 필자는 Windows 7 32 비트에서이 응용 프로그램을 테스트했으며 작동하므로 32/64 비트 호환성 문제가 발생합니다.

이 동작에 대해 알고 계십니까?

+0

이 예외에는 메시지와 오류 코드가 있습니다. 어쩌면 당신은 실제로 무엇이 잘못되었는지 볼 수 있습니다. – nvoigt

+0

나에게 보이는 것은 경로 문제이다. C#은 더 지능적으로되었고 컴파일러는 C# 코드로 잘 작동한다. –

답변

0

은 C++/CLI 코드 인용 : 당신의 C# 코드 인용

System::Diagnostics::Process::Start("soundrecord"); 

:이 호출하기 때문에, 지정

Process.Start("soundrecorder"); 
          ^^ 

는 "soundrecord는"작동하지 않습니다 "를 어를 soundrecord"

정확한 예외 텍스트가 없으면 응용 프로그램이 x86으로 컴파일되어 전체 경로 지정이 작동하지 않는다고 생각합니다. g 64-bit Windows이고, OS는 파일 시스템 방향 전환을하고 있습니다.

C# 명령에 해당하는 것을 사용하는 것이 좋습니다. Windows에는 실행 파일 경로를 검색 할 수있는 기능이 있으므로 그렇게하십시오. 전체 경로를 하드 코딩하면 MS가 이동하기로 결정할 때 향후 호환성 문제가 발생할 수 있습니다.

System::Diagnostics::Process::Start("soundrecorder"); 
               ^^ 
+0

대단히 감사합니다, David. 문제는 32/64 비트 OS 리디렉션이었습니다. 64bits OS에서 리디렉션에 대한 간단한 설명이있는 [게시물] (http://social.msdn.microsoft.com/Forums/en-US/netfx64bit/thread/cfdf4474-266b-4ef5-8992-7fbdc3147521/)을 찾았습니다. 및 해결 방법. 나는 미래의 사용을 위해 나의 질문을 개선했다. – Jairo