2

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);

私が受け取っているエラーはこの行にあります

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

私が間違っていることを知っている人は誰でも、仕事にとても近いようです!

ありがとう !

4

1 に答える 1

1

あなたの場合、「見つかりません」は単にディレクトリが見つからないことを意味します。

おそらく問題は、UNC パスを指定しながら、リモート コンピューターからディレクトリにアクセスしようとしていることにあります。既にリモート マシンに接続しているため、パスはローカル形式である必要があります。

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

ManagementPath managementPath = new ManagementPath(@"Win32_Directory.Name='" + SourcePath + "'");
于 2013-04-26T21:53:59.887 に答える