Когда я запускаю окно проводника с путем к каталогу, запускается новый процесс explorer.exe. После выхода из моей программы процесс explorer.exe остается открытым, что нормально, но когда я закрываю это окно обозревателя, процесс не закрывается. Если в моей программе появилось несколько проводников windows, у меня останется много процессов explorer.exe, которые останутся без изменений, даже когда все проводники windows закрыты.
ProcessStartInfo startInfo = new ProcessStartInfo("explorer.exe", folderPath);
Process.Start(startInfo);
Однако, если бы я запустил только файл explorer.exe без второго аргумента, дополнительный процесс explorer.exe не был бы создан, даже если открыто окно проводника. Когда это окно исследования закрыто, вы также не видите никакого дополнительного процесса explorer.exe, кроме процесса рабочего стола. Обратите внимание, что мой рабочий стол explore.exe - это PID 7704, и этот пример должен быть запущен только один.
ProcessStartInfo startInfo = new ProcessStartInfo("explorer.exe", folderPath);
Process.Start(startInfo);
![enter image description here](https://i.stack.imgur.com/dGsHQ.png)
Я обнаружил, что это правда, если я запускаю запуск вручную с помощью cmd.exe. В командной строке, если вы запустите «explorer.exe C: /», вы можете создать этот же «висячий» процесс explorer.exe, а просто «explorer.exe» - нет.
Мой вопрос заключается в том, как открыть окно проводника для нужной папки, не создавая все эти дополнительные процессы explorer.exe. Мне также интересно, удастся ли «висящим» процессам explorer.exe в конечном итоге go отойти самостоятельно или они будут сидеть там и захватывать всю память, пока мне не придется принудительно завершить задачу. До сих пор я видел, как они сохранялись в течение нескольких дней и никогда не уходили, даже если после закрытия windows с ними больше не связывался исследователь windows.
Единственное, о чем я могу думать, так это откройте файл explorer.exe без аргументов, чтобы он не создавал дополнительный процесс, затем каким-то образом найдите способ найти этот дескриптор окна открытого проводника, а затем используйте его, чтобы перейти к нужному каталогу. Я видел некоторые DLLImport ("user32.dll"), которые могли бы сделать это.
Звучит гораздо сложнее, чем просто использовать Process.Start, чтобы сразу попасть в нужную папку. Я просто не думаю, что для моей программы будет хорошей идеей оставить много процессов утечки памяти, хотя это то, что вы уже можете сделать с помощью cmd.exe. Я не знаю, является ли это Windows «функцией», которая в конечном итоге заканчивается нехваткой памяти.