title: C#0 net use connection
body: <p>So I am having issues with the "net use" command in C#. Basically, I am using the code written <a href="https://stackoverflow.com/a/14870774/2044754">here</a>. The code works great, however I have multiple ids that need to be used sequentially. Unfortunately, when trying to connect to another ID, the connection remains in "net use " in Windows, so this exception is thrown:</p>
  
  <pre><code>Win32Exception: Multiple connections to a server or shared resource by the same user, using more than one user name, are not allowed.
  </code></pre>
  
  <p>Now to me, the obvious thing would be to execute the command prompt programmatically to delete the connection when I am done using it. Here is the code that I am running to delete the connection:</p>
  
  <pre><code>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();
  </code></pre>
  
  <p>I only use /k so I can see if the command works. After this code executes, it says "The network connection cannot be found." However, if I manually open the start menu, and type net use, I can see and delete the connection. I think this may be related to the fact that when running the command prompt programmatically, I notice its being given administrative privilege as opposed to running it under my user token, but I cannot be sure. Any help regarding this would be greatly appreciated.</p>
  
  <p>EDIT: Adding in the command prompt deletion code during the WnetCancelConnection2 actually operates correctly, and deletes the connection from net use. However, checking net use manually outside of the program reveals that the history of the connection still exists and is open. Whoami command reveals the same user. Any reason why there is a discrepancy between what happens programmatically and what happens when I check manually?</p>