title: Best practice to select and copy a file to a remote location?
body: <p>I have a requirement where when a button is clicked the app connects to a remote pc and the user can browse to a folder on the c drive then copy a file to their pc (not on a LAN but a remote location)</p>
  
  <p>When using Remote desktop connection the details are (for example):</p>
  
  <blockquote>
    <p>Computer: abcd.dyndns.org:1234<br>
    Username: bob2\apple<br>
    Password: password  </p>
  </blockquote>
  
  <p>After doing a bit of research using WMI or Impersonation seems the best options. Here's where I'm at with the Impersonation approach..</p>
  
  <pre><code>[DllImport("advapi32.DLL", SetLastError=true)]
  public static extern int LogonUser(string lpszUsername, string lpszDomain, string lpszPassword, int dwLogonType,
  int dwLogonProvider, ref IntPtr phToken);
  
  private void button4_Click(object sender, EventArgs e)
  {
      WindowsIdentity wid_current = WindowsIdentity.GetCurrent();
      WindowsImpersonationContext wic = null;
      try
      {
          IntPtr admin_token = new IntPtr();
  
          if (LogonUser("bob2\apple", "abcd.dyndns.org:1234","password",9, 0, ref admin_token) != 0)
          {   
              wic = new WindowsIdentity(admin_token).Impersonate();
  
              // NOT SURE ABOUT THIS BIT.....
              File.Copy(@"", @"", true);
              MessageBox.Show("Copy Succeeded");
          }
          else
          {
              MessageBox.Show("Copy Failed");
          }
      }
      catch(Exception se)
      {
          int ret = Marshal.GetLastWin32Error();
          MessageBox.Show(ret.ToString(), "Error code: " + ret.ToString());
          MessageBox.Show(se.Message);
      }
      finally
      {
          if (wic != null)
          wic.Undo();
      }           
  }
  </code></pre>