我正在编写一个小程序来将文件从一个服务器复制到另一个服务器,为此我使用了来自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行
如果我在没有提供其他用户凭据的情况下运行该程序,它可以正常工作。
答案 0 :(得分:1)
我没有复制你的环境,所以这只是一个想法,但我已经能够通过将ProcessStartInfo.WorkingDirectory
设置为当前用户无权访问的文件夹来复制此错误。如果它默认为当前应用程序工作文件夹,则可能是尝试使用c:\Users\
下的其他用户无权访问的路径。