문제

주제는 한 줄로 질문하기 쉽지 않다고 말하지 않습니다. 레지스트리에서 읽은 몇 가지 프로그램을 실행해야합니다. 누군가가 전체 길과 논쟁을 저장하는 분야에서 읽어야합니다.
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은 너무 오랫동안 실행되면 프로세스가 종료됩니다.

다른 팁

사실 몇 가지가 있습니다.

  1. /c [명령 줄]을 인수로 cmd.exe로 호출 할 수 있습니다. 이로 인해 cmd.exe가 명령을 처리 한 다음 종료합니다.
  2. 배치 파일에 명령을 작성하여 시작할 수 있습니다.

물론 현재 취하는 접근 방식, 즉 명령 줄을 구문 분석합니다.

언제 '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);
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top