попробуйте это ... Я использую его, чтобы определить при запуске, запущен ли уже другой процесс с тем же именем, что и исполняемый файл, который я пытаюсь запустить, а затем просто перенести его на передний план (и сфокусировать), если он уже запущен ... Вы можете изменить его так, чтобы он брал имя процесса и проверял его на конкретное имя ... Это сообщит вам, если есть процесс, запущенный с определенным именем, но не из того места, откуда этот процесс был загружен. .
Если есть процесс, запущенный с указанным именем, то если у этого процесса есть открытый доступный метод, который возвращает, откуда он был загружен, вы можете вызвать этот метод в запущенном процессе, в противном случае, я не знаю ..
Но просто из любопытства, почему тебя это волнует, если они не разные? И если они каким-то образом отличаются, используйте код, чтобы использовать эту разницу (какой бы она ни была), чтобы определить, какая из них загружена. Но если они одинаковы, как может иметь значение, какой образ диска использовался для его загрузки?
[DllImport("user32.dll")]
private static extern bool SetForegroundWindow(IntPtr hWnd);
[DllImport("user32.dll")]
private static extern bool ShowWindowAsync(IntPtr hWnd, int nCmdShow);
[DllImport("user32.dll")]
private static extern bool IsIconic(IntPtr hWnd);
private const int SW_HIDE = 0;
private const int SW_SHOWNORMAL = 1;
private const int SW_SHOWMINIMIZED = 2;
private const int SW_SHOWMAXIMIZED = 3;
private const int SW_SHOWNOACTIVATE = 4;
private const int SW_RESTORE = 9;
private const int SW_SHOWDEFAULT = 10;
private static bool IsAlreadyRunning()
{
// get all processes by Current Process name
Process[] processes =
Process.GetProcessesByName(
Process.GetCurrentProcess().ProcessName);
// if there is more than one process...
if (processes.Length > 1)
{
// if other process id is OUR process ID...
// then the other process is at index 1
// otherwise other process is at index 0
int n = (processes[0].Id == Process.GetCurrentProcess().Id) ? 1 : 0;
// get the window handle
IntPtr hWnd = processes[n].MainWindowHandle;
// if iconic, we need to restore the window
if (IsIconic(hWnd)) ShowWindowAsync(hWnd, SW_RESTORE);
// Bring it to the foreground
SetForegroundWindow(hWnd);
return true;
}
return false;
}