프로세스인지 확인하는 방법.시작()이(가) 성공적입니까?
프로세스를 시작하기 위해 두 가지 다른 방법을 시도했습니다.
첫번째
정의는 Start 메서드에 대한 파라미터로 정의됩니다.
System.Diagnostics.Process.Start("excel", string.Format("\"{0}\"", ExcelFileBox.Text.ToString()));
내 생각:
이번 건은 시작은 괜찮지만, 어떻게 피드백을 받아야 할지 모르겠습니다.
두번째
조사를 시작했습니다.ProcessStartInfoExcel이 성공적으로 시작되었는지 여부를 알고 싶기 때문입니다. 예를 들어, Excel이 사용자의 컴퓨터에 존재할 가능성이 매우 높지만 보증은 없으며 성공적으로 시작되지 않았을 때 사용자에게 Excel이 성공적으로 시작되었다고 표시하는 것은 어리석은 일입니다.
System.Diagnostics.ProcessStartInfo startinfo = new System.Diagnostics.ProcessStartInfo
{
FileName = "excel",
Arguments = string.Format("\"{0}\"", ExcelFileBox.Text.ToString()),
ErrorDialog = true,
UseShellExecute = false,
WorkingDirectory = Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments)
};
try
{
System.Diagnostics.Process.Start(startinfo);
}
catch (Exception err)
{
Console.WriteLine(err.Message);
}
내 생각:
"시스템이 지정된 파일을 찾을 수 없습니다."라는 오류가 표시되지만, 이 오류가 Excel 응용 프로그램을 의미하는지 내 파일을 의미하는지는 분명하지 않습니다.어쨌든, 오류 메시지 기능은 감사하지만, 지금은 수신되지 않아야 합니다.
이런 일이 성공적으로 일어났는지 아는 방법에 대한 생각, 제안, 아이디어?
해결된
저는 프로세스를 시작하는 첫 번째 방법을 트라이캐치에 넣었고 그것은 아름답게 작동합니다.
프로세스의 MSDN 페이지입니다.Start()는 이 메서드에 Boolean 유형의 오버로드가 있으며, 여기서 반환 값은 다음을 의미합니다.
프로세스 리소스가 시작되면 true이고, 새 프로세스 리소스가 시작되지 않으면 false입니다(예: 기존 프로세스가 재사용되는 경우).
또한 세 가지 예외를 발생시킬 수 있습니다.
- 잘못된 작업예외.
프로세스 구성 요소의 시작 정보에 파일 이름이 지정되지 않았습니다.
-또는 -
프로세스 시작 정보.프로세스StartInfo가 true인 동안 StartInfo 속성의 UseShellExecute 멤버가 true입니다.표준 입력, 프로세스 시작 정보를 리디렉션합니다.StandardOutput 또는 ProcessStartInfo를 리디렉션합니다.RedirectStandardError는 true입니다.
- Win32 예외
연결된 파일을 여는 동안 오류가 발생했습니다.
- 객체 처리됨예외.
프로세스 개체가 이미 삭제되었습니다.
이 프로세스의 오버로드를 사용합니다.Start()(메소드의 유일한 정적 오버로드) ProcessStartInfo 개체를 사용하여 프로세스 클래스의 인스턴스를 생성해야 합니다.
이에 대한 예는 다음과 같습니다.
ProcessStartInfo processStartInfo = new ProcessStartInfo("EXCEL.EXE");
Process process = new Process();
process.StartInfo = processStartInfo;
if (!process.Start())
{
// That didn't work
}
하지만, 이것이 여전히 던져질 수 있다는 것을 고려할 때, 당신은 아마도 정전기 중 하나에 캐치를 감는 것이 더 나을 것입니다.메서드 호출을 시작합니다.
그런 점을 감안할 때, 프로세스에 대한 요청은 분명해 보입니다.Start()는 작동하거나 작동하지 않으며 반환 값이 0(또는 예외가 느려짐)인 것으로 이 값을 확인할 수 있습니다.
프로세스가 시작되면 프로세스 클래스의 특성(예: HasExited)을 사용하여 프로세스가 어떤 상태인지 확인할 수 있는 등 많은 제어 권한을 갖게 됩니다.
간단히 말해서, 사용자가 자신의 기계에 엑셀이 없으면 프로세스를 수행합니다.시작()은 예외를 발생시킵니다.
속성을 확인할 수 있습니다.0(성공) 가치
과정.Start()는 또한 기존 프로세스를 획득했는지 또는 새 프로세스가 시작되었는지 여부를 알려주는 부울 값을 반환합니다.
또한 프로세스의 프로세스 ID를 확인하여 프로세스가 시작/계속 실행 중인지 확인할 수 있습니다.다음과 같은 것:
bool started = False;
Process p = new Process();
p.StartInfo = YourStartInfo;
started = p.Start();
try {
int procId = p.Id;
}
catch(InvalidOperationException){
started = False
}
catch(Exception ex) {
started = False
}
프로세스가 실제로 시작되었는지 정확하게 확인하기 위해 프로세스 ID를 찾으려고 했습니다. 프로세스 ID를 찾으면 프로세스 ID를 찾지 못하면 계속 진행하여 캐치를 입력하고 디버그 문을 인쇄합니다.
try
{
bool pathExists = File.Exists(module.ExecutionPath);
if (pathExists)
{
ProcessStartInfo startArgs = new ProcessStartInfo();
startArgs.FileName = "C:\Windows\System32\notepad.exe";
startArgs.Arguments = null;
Process process = new Process();
process.StartInfo = startArgs;
process.Start();
Process startedProcess = CheckIfProcessStarted(process);
}
}
catch (Exception ex)
{
Debug.WriteLine(ex.Message + " " + ex.InnerException);
Debug.WriteLine("Couldnt find the process so it never ran");
}
private Process CheckIfProcessStarted(Process process)
{
return Process.GetProcessById(process.Id);
}
언급URL : https://stackoverflow.com/questions/5750651/how-to-know-if-process-start-is-successful
'programing' 카테고리의 다른 글
| PyMongo를 사용하여 Pandas 데이터 프레임을 mongodb에 삽입합니다. (0) | 2023.05.09 |
|---|---|
| 동일한 종속 어셈블리의 서로 다른 버전 간에 해결할 수 없는 충돌이 발견되었습니다. (0) | 2023.05.09 |
| 파이썬 3에서 x**4.0이 x**4보다 빠른 이유는 무엇입니까? (0) | 2023.05.09 |
| PostgreSQL에서 범주별로 최대 날짜 그룹이 있는 ID를 선택하는 방법은 무엇입니까? (0) | 2023.05.09 |
| MongoDB 나침반: 고유 필드 값 선택 (0) | 2023.05.09 |