从C#代码作为不同用户执行xcopy时出错

时间:2015-02-06 01:58:50

标签: c# xcopy processstartinfo

我正在编写一个小程序来将文件从一个服务器复制到另一个服务器,为此我使用了来自C#代码的xcopy命令。我想以不同的用户身份执行该过程,我正在使用以下代码 -

string sourceLoc = @"c:\test\xyz.xlsx";

string destinationLoc = @"c:\subfolder";

var abc= "Password";
var pass = new System.Security.SecureString();

foreach (char c in abc)
{
    pass.AppendChar(c);
}

// Use ProcessStartInfo class
ProcessStartInfo startInfo = new ProcessStartInfo();
startInfo.UserName = "admin";
startInfo.Password = pass;
startInfo.Domain = "domain";
startInfo.Verb = "runas";
startInfo.CreateNoWindow = false;
startInfo.UseShellExecute = false;


startInfo.FileName = "xcopy";

startInfo.WindowStyle = ProcessWindowStyle.Hidden;

startInfo.Arguments = "\"" + sourceLoc + "\"" + " " + "\"" + destinationLoc + "\"" + @" /e /y /I";

try
{
    using (Process exeProcess = Process.Start(startInfo))
    {
        exeProcess.WaitForExit();
    }
}
catch (Exception exp)
{
throw exp;
}

但是我收到以下错误: -

未处理的异常:System.ComponentModel.Win32Exception:目录名无效    at LogReader.Program.Main(String [] args)在C:\ Users \ sdg \ documents \ visual studio 2010 \ Projects \ LogReader \ LogReader \ Program.cs:第66行

如果我在没有提供其他用户凭据的情况下运行该程序,它可以正常工作。

1 个答案:

答案 0 :(得分:1)

我没有复制你的环境,所以这只是一个想法,但我已经能够通过将ProcessStartInfo.WorkingDirectory设置为当前用户无权访问的文件夹来复制此错误。如果它默认为当前应用程序工作文件夹,则可能是尝试使用c:\Users\下的其他用户无权访问的路径。