2013-04-26 4 views
2

Я пытаюсь найти способ скопировать папку в общий сетевой ресурс (домашний привод) с использованием WMI в C#. Мне нужно иметь возможность передавать учетные данные пользователей, поскольку они являются единственными, кто может получить доступ к папке. Вот что я до сих пор.Удаленная папка с копией WMI

Метод:

static uint DirectoryCopy(string computer, string user, string pass, string SourcePath, string DestinationPath, bool Recursive) 
    { 
         try 
      { 
       ConnectionOptions connection = new ConnectionOptions(); 
       connection.Username = user; 
       connection.Password = pass; 
       connection.Impersonation = ImpersonationLevel.Impersonate; 
       connection.EnablePrivileges = true; 
       ManagementScope scope = new ManagementScope(
        @"\\" + computer + @"\root\CIMV2", connection); 
       scope.Connect(); 



       ManagementPath managementPath = new ManagementPath(@"Win32_Directory.Name=" + "\'" + SourcePath.Replace("\\", "\\\\") + "\'"); 

       ManagementObject classInstance = new ManagementObject(scope, managementPath, null); 

       // Obtain in-parameters for the method 

       ManagementBaseObject inParams = 
        classInstance.GetMethodParameters("CopyEx"); 

       // Add the input parameters. 
       inParams["FileName"] = DestinationPath.Replace("\\", "\\\\"); 
       inParams["Recursive"] = true; 
       inParams["StartFileName"] = null; 

       // Execute the method and obtain the return values. 
       ManagementBaseObject outParams = 
        classInstance.InvokeMethod("CopyEx", inParams, null); 

       // List outParams 

       MessageBox.Show((outParams["ReturnValue"]).ToString()); 


      } 
      catch (UnauthorizedAccessException) 
      { 
       lblBackupStatus.Text = "Access Denied, Wrong password for selected user"; 
      } 

      catch (ManagementException exc) 
      { 
       MessageBox.Show(exc.ToString()); 
      } 
    } 

И что я перейти к методу:

 string computer = ddlBackupselectcomp.Text; 
     string user = ddlBackupselectuser.Text; 
     string pass = txtBackuppwd.Text; 

     string userdesktop = @"\\" + computer + @"\C$\Users\" + user + @"\Desktop"; 

     string hdrivepath = @"\\dist-win-file-3\homes\" + user; 



      string SourcePath = userdesktop; 
      string DestinationPath = hdrivepath; 

      DirectoryCopy(computer, user, pass, SourcePath, DestinationPath, true); 

Ошибка Я reciving на этой линии

ManagementBaseObject inputArgs = dir.GetMethodParameters("CopyEx"); "Not Found" 

Каждый знает, что я» я делаю неправильно, кажется, что он так близок к работе!

Спасибо!

ответ

1

В вашем случае «Не найдено» просто означает, что каталог не найден.

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

string userdesktop = @"c:\Users\" + user + @"\Desktop"; 

и

ManagementPath managementPath = new ManagementPath(@"Win32_Directory.Name='" + SourcePath + "'"); 
+0

О, имеет смысл сейчас, я бы сделать что-нибудь на пути источника или DestinationPath? теперь у меня есть почтовый ящик, который просто появляется и говорит почему-то 9. Любая идея почему? Спасибо большое. – Boundinashes6

+0

9 - это возвращаемое значение из метода ** CopyEx ** и означает «Недопустимый объект». В вашем случае, конечно, значение параметра FileName находится в неправильном формате (попробуйте использовать формат пути назначения) или что путь доступа не может быть доступен –

Смежные вопросы