응용 프로그램의 다른 인스턴스가 실행 중인지 확인하는 방법
프로그램의 다른 인스턴스(예: test.exe)가 실행 중인지 확인하고, 실행 중인 경우 응용 프로그램의 로드를 중지하는 방법을 누군가가 보여줄 수 있습니까?
심각한 코드를 원하십니까?여기 있어요.
var exists = System.Diagnostics.Process.GetProcessesByName(System.IO.Path.GetFileNameWithoutExtension(System.Reflection.Assembly.GetEntryAssembly().Location)).Count() > 1;
이것은 모든 응용 프로그램(모든 이름)에 대해 작동하며 다음과 같이 됩니다.true
동일한 응용 프로그램이 실행 중인 다른 인스턴스가 있는 경우.
편집: 다음 중 하나를 사용하여 필요한 사항을 해결할 수 있습니다.
if (System.Diagnostics.Process.GetProcessesByName(System.IO.Path.GetFileNameWithoutExtension(System.Reflection.Assembly.GetEntryAssembly().Location)).Count() > 1) return;
당신의 주된 방법에서 그 방법을 그만두는 것...OR
if (System.Diagnostics.Process.GetProcessesByName(System.IO.Path.GetFileNameWithoutExtension(System.Reflection.Assembly.GetEntryAssembly().Location)).Count() > 1) System.Diagnostics.Process.GetCurrentProcess().Kill();
그러면 현재 로드 프로세스가 즉시 중지됩니다.
시스템에 대한 참조를 추가해야 합니다.확장 메서드의 Core.dll입니다.또는 다음을 사용할 수 있습니다..Length
소유물.
'프로그램'이 무슨 뜻인지는 잘 모르겠지만 응용프로그램을 한 인스턴스로 제한하려면 Mutex를 사용하여 응용프로그램이 이미 실행되고 있지 않은지 확인할 수 있습니다.
[STAThread]
static void Main()
{
Mutex mutex = new System.Threading.Mutex(false, "MyUniqueMutexName");
try
{
if (mutex.WaitOne(0, false))
{
// Run the application
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
Application.Run(new MainForm());
}
else
{
MessageBox.Show("An instance of the application is already running.");
}
}
finally
{
if (mutex != null)
{
mutex.Close();
mutex = null;
}
}
}
여기 몇 가지 좋은 샘플 애플리케이션이 있습니다.다음은 가능한 한 가지 방법입니다.
public static Process RunningInstance()
{
Process current = Process.GetCurrentProcess();
Process[] processes = Process.GetProcessesByName (current.ProcessName);
//Loop through the running processes in with the same name
foreach (Process process in processes)
{
//Ignore the current process
if (process.Id != current.Id)
{
//Make sure that the process is running from the exe file.
if (Assembly.GetExecutingAssembly().Location.
Replace("/", "\\") == current.MainModule.FileName)
{
//Return the other process instance.
return process;
}
}
}
//No other instance was found, return null.
return null;
}
if (MainForm.RunningInstance() != null)
{
MessageBox.Show("Duplicate Instance");
//TODO:
//Your application logic for duplicate
//instances would go here.
}
다른 많은 가능한 방법들.대안은 예제를 참조하십시오.
편집 1: 콘솔 응용 프로그램이 있다는 귀하의 의견을 방금 보았습니다.그것은 두 번째 샘플에서 논의되었습니다.
프로세스 정적 클래스에는 실행 중인 프로세스를 검색하는 데 사용할 수 있는 GetProcessesByName() 메서드가 있습니다.실행 파일 이름이 동일한 다른 프로세스를 검색하기만 하면 됩니다.
해보세요.
Process[] processes = Process.GetProcessesByName("processname");
foreach (Process p in processes)
{
IntPtr pFoundWindow = p.MainWindowHandle;
// Do something with the handle...
//
}
언급URL : https://stackoverflow.com/questions/6392031/how-to-check-if-another-instance-of-the-application-is-running
'programing' 카테고리의 다른 글
VBA를 사용하지 않고 Excel에서 활성 행/열을 강조 표시하시겠습니까? (0) | 2023.05.16 |
---|---|
"pip 설치"와 "python-m pip 설치"의 차이점은 무엇입니까? (0) | 2023.05.16 |
도커 컨테이너에 호스트 디렉토리를 마운트하는 방법 (0) | 2023.05.16 |
사설 Github repo를 npm 종속성으로 사용하는 방법 (0) | 2023.05.16 |
.find() mongoose에서 아무것도 발견되지 않으면 조치를 취합니다. (0) | 2023.05.16 |