Member 914236 Ответов: 1

Процесс waitforexit не ждет закрытия проводника


Привет,

Я пытаюсь открыть Проводник Windows, а затем дождаться, пока пользователь закроет это приложение, прежде чем продолжить работу с моей программой.

Программа работает по назначению с блокнотом, но не с проводником.

Спасибо

Что я уже пробовал:

Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
        Dim newProc As Diagnostics.Process
        'newProc = Diagnostics.Process.Start("Notepad.exe") ' This Works
        newProc = Diagnostics.Process.Start("Explorer.exe") ' This does not work
        newProc.WaitForExit()
        MsgBox("Continue Processing")
    End Sub

1 Ответов

Рейтинг:
0

Dave Kreskowiak

Это потому, что проводник запускается только один раз и остается запущенным все время, пока пользователь входит в систему на консоли. Когда вы запустили свой экземпляр Explorer, вы на самом деле не запустили новый процесс под названием "Explorer.exe". Вы сказали существующему экземпляру проводника открыть новое окно.


Member 914236

Спасибо, что объяснили, почему мой код не работает.
Есть ли какой-нибудь способ, которым я могу обнаружить, когда пользователь закрывает окно Проводника / экземпляры, которые открыла программа?

Dave Kreskowiak

Нет никакого встроенного способа сделать это, нет. Вам придется запустить окно Проводника, затем перечислить окна оболочки и постоянно делать это, отслеживая, какое из окон является вашим (у вас не будет 100% точности!), и ждать, пока окно исчезнет. Это требует, чтобы ваш код "опросил" для этого.

Поскольку вы запускаете внешний "процесс", вы не будете иметь никакого контроля над тем, что пользователь делает с этим окном. Я действительно должен задаться вопросом, почему вы вообще запускаете окно Проводника, поскольку вы не можете его контролировать и зависите от него как от части своего бизнес-процесса.

Member 914236

Приложение позволяет пользователю связать файл (документ) с бухгалтерской проводкой.
Я даю пользователю возможность создавать подпапки, копировать, перемещать и переименовывать файлы, нажав на кнопку, чтобы открыть Express.
По завершении пользователь просто закрывает express, чтобы вернуться в программу. Все это работает без сучка и задоринки, пока пользователь не вернется в программу.
В этот момент программа должна обновить экран, чтобы отразить изменения, которые пользователь мог внести с помощью проводника - например, изменить имя файла.
Мое текущее решение состоит в том, чтобы показать мигающую кнопку обновления при запуске проводника. Поскольку проводник скрывает форму программы, пользователь видит кнопку обновления только после закрытия проводника.

Dave Kreskowiak

Вы можете все это сделать в OpenFileDialog.