C#Net使用显示了两种不同的东西

C#Net使用显示了两种不同的东西,c#,windows,command,prompt,C#,Windows,Command,Prompt,核心问题是,当以编程方式运行命令提示符以从net use删除连接时,显示的结果与在同一上下文中不同,用户打开命令提示符并运行net use 这是删除连接的代码: System.Diagnostics.Process process = new System.Diagnostics.Process(); System.Diagnostics.ProcessStartInfo startInfo = new System.Diagnostics.ProcessStartInfo(); startIn

核心问题是,当以编程方式运行命令提示符以从net use删除连接时,显示的结果与在同一上下文中不同,用户打开命令提示符并运行net use

这是删除连接的代码:

System.Diagnostics.Process process = new System.Diagnostics.Process();
System.Diagnostics.ProcessStartInfo startInfo = new System.Diagnostics.ProcessStartInfo();
startInfo.WindowStyle = System.Diagnostics.ProcessWindowStyle.Normal;
startInfo.FileName = "cmd.exe";
startInfo.Arguments = "/K net use delete \\IPAddrofserver";
process.StartInfo = startInfo;
process.Start();

因此,所发生的事情是通过编程成功地删除了连接,但是如果我打开cmd提示符并运行netuse,我会看到刚才删除的连接。此连接保持打开状态会导致程序出错。Whoami显示相同的用户正在被利用。那么为什么会有区别呢?

我认为当您(使用Active Directory的用户)使用CMD和您的应用程序实例(svchost?或任务调度器?)时,情况会有所不同,除非您在ProcessStartInfo上指定了自己的凭据(域、用户名和密码),然后,我认为您可以作为用户很好地与CMD实例同步。

但是,如果连接是以编程方式打开的,并且是以编程方式关闭的,为什么用户也会有一个打开的连接呢?我认为你是对的,但我对事态的发展感到好奇。基本上是程序打开连接->操作->程序关闭连接。用户在哪里输入图片?哈哈,我不能准确地支持这一点。我认为这也是太多安全/基于会话的网络服务等的副作用,可能会导致这些情况。您的用户是完全管理员吗?也许这就是为什么应用程序可以在逻辑上打开工作站中的任何路径,而在删除时,它只影响其实例,而不影响您作为管理员的实例。