Как освободить все ресурсы процесса и закрыть его, не используя блок в c # - PullRequest
0 голосов
/ 19 сентября 2019

Я хочу освободить все ресурсы, прикрепленные к процессу, а затем закрыть этот процесс.Но даже если я закрою процесс, некоторые ресурсы все еще присоединяются процессом.

Поток вызова метода: CreateDir -> StartProcess -> OtherMethod-> CloseProcess -> DeleteDir.При запуске процесса открывается окно командной строки.Когда я закрываю процесс, вызывается Dispose () компонента.Он не закрывает командную строку.Я пробовал Close () также, но результат тот же.После этого, когда я вызываю DeleteDir (), он выдает исключение, говорящее «Файл используется другим процессом».Я уверен, что никакой другой процесс, кроме того, что я начал, не использует эти файлы.Я вызвал Kill () после Dispose (), но это также выдает исключение, говорящее «к этому объекту не прикреплен процесс».Здесь я не / не могу использовать «используя блок».

Class ABC{
    Process proc;
    string dir;
    void CreateDir(string dirName){
        Directory.CreateDirectory(dirName);
        dir = dirName;
    }
    void StartProcess(){
        proc.FileName = "SomeProcess.exe";
        proc.Arguments = "some args";
        proc.WorkingDirectory = dir;
        proc.Start();
    }
    void CloseProcess(){
        if(proc != null && !proc.HasExited){
            proc.Dispose(); // calling Component's Dispose()
            //proc.Close();
            //proc.Kill();
        }
    }
    void DeleteDir(){
        Directory.Delete(dir);
    }
    void OtherMethod(){
        //do something else
    }
}

Поэтому я хочу сделать три вещи: 1) Безопасно освободить все ресурсы.2) Закройте процесс.3) Удалить созданный каталог.

Любая помощь приветствуется.

Заранее спасибо.

...