인수가 어디에서 시작되는지 모르는 프로그램을 어떻게 실행합니까?
-
03-07-2019 - |
문제
주제는 한 줄로 질문하기 쉽지 않다고 말하지 않습니다. 레지스트리에서 읽은 몇 가지 프로그램을 실행해야합니다. 누군가가 전체 길과 논쟁을 저장하는 분야에서 읽어야합니다.
System.diagnostics.processStartinfo 프로그램 이름과 인수를 설정했지만 프로세스 실행 파일을 한 필드에 저장하기 위해 구문 분석 해야하는 다양한 인수를 찾았습니다.
전체 문자열을 그대로 실행하는 방법이 있습니까?
해결책
프로세스 시작 정보와 함께 cmd.exe를 사용하여 위의 포스터와 같은 방식으로 이것을 해결했습니다.
Process myProcess = New Process;
myProcess.StartInfo.FileName = "cmd.exe";
myProcess.StartInfo.Arguments = "/C " + cmd;
myProcess.StartInfo.WindowStyle = ProcessWindowStyle.Hidden;
myProcess.StartInfo.CreateNoWindow = True;
myProcess.Start();
myProcess.WaitForExit();
myProcess.Close();
CMD /C는 명령을 수행 한 다음 종료됩니다. Waitforexit은 너무 오랫동안 실행되면 프로세스가 종료됩니다.
다른 팁
사실 몇 가지가 있습니다.
- /c [명령 줄]을 인수로 cmd.exe로 호출 할 수 있습니다. 이로 인해 cmd.exe가 명령을 처리 한 다음 종료합니다.
- 배치 파일에 명령을 작성하여 시작할 수 있습니다.
물론 현재 취하는 접근 방식, 즉 명령 줄을 구문 분석합니다.
언제 'useshellexecute'System.diagnostics.process 호출을 설정하지 않았습니다 CreateProcess 또는 CreateProcessasuser 실제로 프로그램을 시작하려면 (사용자/도메인/암호를 지정하는 경우 두 번째를 사용합니다). 그리고이 두 호출 모두 명령과 파일을 단일 인수로 취할 수 있습니다. MSDN에서 :
lpapplicationName 매개 변수는 null 일 수 있습니다. 이 경우, 모듈 이름은 LPCommandLine 문자열에서 첫 번째 공백 - 분류 된 토큰이어야합니다. ...
lpapplication name maps to processStartinfo.filename 및 lpcommandline 맵은 인수에 맵입니다. 그래서 당신은 그냥 가서는 안됩니다.
var processStartInfo = new ProcessStartInfo()
{
UseShellExecute = false,
Arguments = cmd
};
Process.Start(processStartInfo);