перестроить классы wmi с помощью С#

Я пишу код С# для перестройки классов wmi. я обнаружил, что это можно сделать с помощью этой команды, как обсуждалось здесь :

Regsvr32 %SystemRoot%\System32\wbem\wmidcprv.dll
cd /d %windir%\system32\wbem
for %i in (*.dll) do RegSvr32 -s %i
for %i in (*.exe) do %i /RegServer

Я попытался передать эту команду в cmd и прочитать вывод как:

Process objProcess = new Process();
objProcess.StartInfo.UseShellExecute = false;
objProcess.StartInfo.RedirectStandardOutput = true;
//objProcess.StartInfo.CreateNoWindow = true;
//objProcess.StartInfo.WindowStyle = ProcessWindowStyle.Hidden;
string cmd1=@"Regsvr32 %SystemRoot%\System32\wbem\wmidcprv.dll";
string cmd2=@"cd /d %windir%\system32\wbem";
string cmd3=@"for %i in (*.dll) do RegSvr32 -s %i";
string cmd4 = @"for %i in (*.exe) do %i /RegServer";
string strFinal = cmd1 + "\n" + cmd2 + "\n" + cmd3 + "\n" + cmd4;
//string cmd1=@"Regsvr32 %SystemRoot%\System32\wbem\wmidcprv.dll cd /d %windir%\system32\wbem for %i in (*.dll) do RegSvr32 -s %i for %i in (*.exe) do %i /RegServer";
objProcess.StartInfo.FileName = string.Format("cmd.exe");
objProcess.StartInfo.Arguments = string.Format(strFinal);
try
{
objProcess.Start();
}
catch
{
throw new Exception("Error");
}
StreamReader strmReader = objProcess.StandardOutput;
string strTempRow = string.Empty;
while ((strTempRow = strmReader.ReadLine()) != null)
{
    Console.WriteLine(strTempRow);
}
if (!objProcess.HasExited)
{
objProcess.Kill();
}

Можно ли поделиться идеей, как добиться этого с помощью кода, а не вручную.


person Arshad    schedule 04.04.2013    source источник


Ответы (1)


Я предполагаю, что у вас есть проблемы с выполнением команд ms-dos, а не с чтением вывода.

Вы пытались создать пакетный файл с этими командами и выполнить его с классом системного процесса?

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

System.Diagnostics.Process.Start("wmiBuilder.bat");

person Tuto    schedule 04.04.2013
comment
Я ценю ваши усилия, но я не хочу использовать пакетный файл. B хотите сделать это напрямую C# будь то cmd или любая команда wmi - person Arshad; 04.04.2013
comment
Выполняйте команды одну за другой или посмотрите этот ответ stackoverflow.com/a/8860385/2244573 - person Tuto; 04.04.2013
comment
Просто создайте временный пакетный файл и запустите его с помощью CMD.EXE. Это то, что делает задача MSBuild <Exec>. - person Roger Lipscombe; 04.04.2013
comment
как я могу создать временный пакетный файл во время выполнения? - person Arshad; 04.04.2013