我有一个.bat文件,它可以将文件从一个位置复制到另一个位置。
执行Bat文件时,我可以在输出中看到“完成!”消息,但是文件没有被复制。唯一的解决方法是:
SET SRC=%1
SET DEST=%2
xcopy /Y/I %SRC%\*.txt %DEST%\temp
echo Done!
我正在尝试通过C#程序运行这个文件
var psi = new ProcessStartInfo(fileToRun);
psi.Arguments = args;
psi.RedirectStandardOutput = true;
psi.RedirectStandardError = true;
psi.WindowStyle = ProcessWindowStyle.Hidden;
psi.UseShellExecute = false;
psi.CreateNoWindow = true;
Process cmdProc = Process.Start(psi);
StreamReader output = cmdProc.StandardOutput;
StreamReader errors = cmdProc.StandardError;
cmdProc.WaitForExit();
执行Bat文件时,我可以在输出中看到“完成!”消息,但是文件没有被复制。唯一的解决方法是:
psi.UseShellExecute = true;
psi.RedirectStandardOutput = false;
psi.RedirectStandardError = false;
但在这种情况下,我必须禁用输出/错误重定向并且需要它们。因此,这对我不起作用。
我尝试设置管理员的用户名/密码
psi.UserName = username;
psi.Password = password;
登录成功,但在StandardError流中收到了'The handle is invalid'消息。
我猜想我正在尝试运行的进程没有复制文件的权限,我不知道如何授予它这些权限。
请帮忙!
编辑过的内容
谢谢回答! 我已经花费了几个小时来解决这个问题,正如常常发生的那样,我发布了我的问题并找到了解决方案 :)
为了避免获取'The handle is invalid'消息,你必须
psi.RedirectStandardInput = true;
但是现在,如果设置了用户名,我可以看到cmd.exe窗口,这是不好的。
XCOPY
的输出,它会说什么? 如果权限是问题,它应该包括“访问被拒绝”(或您语言的等效词)。 - Christian.K