как обрабатывать диагностические сообщения winrar из кода

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

Код

public static string RarFiles(string rarPackagePath,
        Dictionary<int, string> accFiles)
    {
        string error = "";
        try
        {
            string[] files = new string[accFiles.Count];
            int i = 0;
            foreach (var fList_item in accFiles)
            {
                files[i] = "\"" + fList_item.Value;
                i++;
            }
            string fileList = string.Join("\" ", files);
            fileList += "\"";
            System.Diagnostics.ProcessStartInfo sdp = new System.Diagnostics.ProcessStartInfo();
            string cmdArgs = string.Format("A {0} {1} -ep1 -r",
                String.Format("\"{0}\"", rarPackagePath),
                fileList);
            sdp.ErrorDialog = true;
            sdp.UseShellExecute = true;
            sdp.Arguments = cmdArgs;
            sdp.FileName = winrarPath;//Winrar.exe path
            sdp.CreateNoWindow = false;
            sdp.WindowStyle = System.Diagnostics.ProcessWindowStyle.Hidden;
            System.Diagnostics.Process process = System.Diagnostics.Process.Start(sdp);
            process.WaitForExit();
            //string s = process.StandardOutput.ReadToEnd();
            error = "OK";
        }
        catch (Exception ex)
        {
            error = ex.Message;
        }
        return error;
    }

Может ли кто-нибудь сказать мне, как я могу обрабатывать диагностические сообщения WinRAR.


person Ashish Rathore    schedule 14.06.2013    source источник
comment
Почему вы закомментировали строку, в которой стандартный вывод сохраняется в строке s? Должен быть сохранен каждый вывод из winRar.   -  person Romano Zumbé    schedule 14.06.2013
comment
Поскольку строка s всегда пуста. Когда возникает какая-либо ошибка при создании rar с помощью winrar.exe, он показывает диагностическое сообщение и ничего не возвращает в процессе. StandardOutput.ReadToEnd();   -  person Ashish Rathore    schedule 14.06.2013


Ответы (1)


я думаю, вы пропустили некоторые части:

попробуйте добавить эти:

sdp.StartInfo.RedirectStandardOutput = true;

после Start добавьте строку, чтобы получить вывод. После этого вызовите WaitForExit()

sdp.Start();
string output = stillc.StandardOutput.ReadToEnd();
sdp.WaitForExit();

*Примечание. Это работает, только если вывод отображается в окне консоли.

Надеюсь, поможет :)

person fahimalizain    schedule 14.06.2013
comment
Для этого мне нужно установить sdp.UseShellExecute = false; Который показывает исполняемые окна. И я не хочу показывать эти окна. Кстати, он все еще показывает пустой вывод - person Ashish Rathore; 14.06.2013