Ошибка при выполнении xcopy из кода C# от имени другого пользователя

Я пишу небольшую программу для копирования файлов с одного сервера на другой, и для этого я использую xcopy Команда из кода C#. Я хочу выполнить процесс как другой пользователь, для которого я использую следующий код -

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: недопустимое имя каталога в LogReader.Program.Main(String[] args) в C:\Users\sdg\documents\visual studio 2010\Projects\LogReader\LogReader\Program.cs: линия 66

Если я запускаю программу без предоставления других учетных данных пользователя, она работает нормально.

1 ответ

Я не реплицировал вашу среду, так что это всего лишь идея, но я смог воспроизвести эту ошибку, установив ProcessStartInfo.WorkingDirectory в папку, к которой у текущего пользователя нет доступа. Если по умолчанию используется текущая папка приложений, возможно, она пытается использовать путь в c:\Users\ к которому другой пользователь не имеет доступа.

Другие вопросы по тегам