내 프로그램이 프로세스를 시작하고 프로그램을 다시 실행하기 전에 프로그램이 종료되었는지 확인해야합니다. 이렇게하기 위해, 프로세스의 시작 시간을 뮤텍스와 같은 것으로 저장하여 나중에 검색 할 수 있고 프로세스의 이름과 시작 시간이 일치하는지 확인하고 싶습니다.시스템 전체의 영구 저장 장치입니까?
어떻게하면됩니까? 사용자가 로그 아웃 한 후에도 하드 드라이브에 무엇이든 붙여두기를 원하지 않습니다. 나는 C# 및 .NET
내 프로그램이 프로세스를 시작하고 프로그램을 다시 실행하기 전에 프로그램이 종료되었는지 확인해야합니다. 이렇게하기 위해, 프로세스의 시작 시간을 뮤텍스와 같은 것으로 저장하여 나중에 검색 할 수 있고 프로세스의 이름과 시작 시간이 일치하는지 확인하고 싶습니다.시스템 전체의 영구 저장 장치입니까?
어떻게하면됩니까? 사용자가 로그 아웃 한 후에도 하드 드라이브에 무엇이든 붙여두기를 원하지 않습니다. 나는 C# 및 .NET
을 사용하고 있습니다 참고로
당신은 프로세스 ID가 아닌 프로세스 이름을 저장하고 시간을 시작하고 싶어. 그렇게하면 프로세스를 더 간단하게 종료 할 수 있습니다. % TMP %에 파일을 저장할 수 있으므로 하드 드라이브 공간이 부족할 때 정리할 수 있습니다. 프로세스를 종료 할 수
C# 코드는 다음과 같습니다
int pid = Convert.ToInt32(File.ReadAllText(pidFile));
Process proc = Process.GetProcessById(pid);
proc.Kill();
당신이 좋아 % TMP % 디렉토리를 찾을 수 있습니다
var tmp = Environment.GetEnvironmentVariable("TMP");
편집 : PID는 재사용 할 수있는, 당신 때문에 그것도 처리해야합니다.
rossfabricant에 동의합니다. 이름 대신 프로세스 ID를 저장해야합니다. 프로세스 ID는 다시 시작할 때까지 다시 사용되지 않으므로 안전해야합니다.
그러나 저장을 위해 TMP 환경 변수를 사용하지 말고 Isolated Storage을 찾아 보시기 바랍니다. 이것은 더 많은 .NET의 스토리지 측면을 지향합니다. 또한 응용 프로그램을 실행하는 데 필요한 보안을 저하시킵니다.
불행히도 로그 아웃 후에도 임시 디렉토리와 격리 된 저장소가 모두 유지되므로이 경우를 처리하는 논리가 필요합니다. 그러나 앱 종료시 정보를 지울 수는 있습니다.
시작하려는 프로세스 코드에 액세스 할 수있는 경우 명명 된 파이프 또는 공유 메모리와 같은 것을 사용하여 응용 프로그램이 실행 중인지 여부를 확인하는 것이 좋습니다. 이것은 또한 프로세스를 종료하는 훨씬 더 깔끔한 방법을 제공합니다. 프로세스를 죽이는 것은 최후의 수단이되어야합니다. 일반적으로, 피할 수만 있다면 프로세스를 죽이는 것이 필요한 어플리케이션을 빌드하지 않을 것입니다.
내가 시작하는 프로세스를 제어 할 권한이 없습니다. plink (puTTY suite)에서 시작 했으므로, 시작하기 전에 plink라는 프로세스 이름을 가진 프로세스를 죽이는 것을 원하지 않는 이유입니다. 그러나 pid와 이름이 일치하면 아마도 내 것이됩니다. – Malfist
프로세스 ID는 다시 시작하기 전에 다시 사용할 수 있습니다. 심지어이 사실을 System.Diagnostics.Process의 문서에서 언급합니다. - http://msdn.microsoft.com/en-us/library/system.diagnostics.process.id.aspx – Moose
무스 : 수정 해 주셔서 감사합니다. :) 깨닫지 못했다. –
체크 아웃 : [PersistentDictionary'] (http://izlooite.blogspot.com/2011/04/persistent-dictionary.html) 클래스 –