我在程序中使用net.exe
来查看工作组中的所有计算机。
代码如下:
var net = new Process();
net.StartInfo.FileName = "net.exe";
net.StartInfo.CreateNoWindow = true;
net.StartInfo.Arguments = @"VIEW /DOMAIN:my-workgroup";
net.StartInfo.RedirectStandardOutput = true;
net.StartInfo.UseShellExecute = false;
net.StartInfo.RedirectStandardError = true;
net.Start();
当我在shell中执行时,该命令工作正常,但是当我使用显示的代码时,该命令返回the device is not connected
。
我也尝试过以管理员身份运行程序,这没什么区别。
指定的域名实际上是工作组。
对于在shell中运行的net.exe
,指定工作组可以正常工作。
此外,当我为不同的域尝试net view
时,代码也有效。因此,当我从shell或Process.Start()
运行命令时,环境必定存在一些差异。
命令在shell中与Process.Start()
表现不同的原因是什么?
答案 0 :(得分:0)
我不知道它是否能解决你所寻找的问题,但这对我有用;
您需要挂钩捕获输出以将其带到控制台
class Program
{
static void Main(string[] args)
{
var net = new Process()
{
StartInfo = new ProcessStartInfo("net.exe", @"view /domain:domain")
{
RedirectStandardOutput = true,
UseShellExecute = false,
},
};
net.OutputDataReceived += WriteToConsole;
net.ErrorDataReceived += WriteToConsole;
net.Start();
net.BeginOutputReadLine();
net.WaitForExit();
Console.ReadLine();
}
private static void WriteToConsole(object sender, DataReceivedEventArgs e)
{
Console.WriteLine(e.Data);
}
}