我有一个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();
蝙蝠文件被执行,我可以看到’完成!’输出中的消息,但不复制文件.
它的唯一工作方式是
psi.UseShellExecute = true; psi.RedirectStandardOutput = false; psi.RedirectStandardError = false;
但在这种情况下,我必须禁用输出/错误重定向,我需要它们.
所以这对我不起作用.
psi.UserName = username; psi.Password = password;
登录成功,但我在StandardError流中收到“句柄无效”消息.
我想我正在尝试运行的进程没有权限复制文件和
我不知道如何授予他这些权限.
请帮忙!
EDITED
谢谢你的回复!
我花了几个小时试图处理这个问题,因为它总是发生我发布了我的问题,并找到了解决方案:)
为了避免您必须收到“句柄无效”消息
psi.RedirectStandardInput = true;
但是现在我可以看到cmd.exe窗口,如果设置了UserName,那就不好了.
解决方法
你错过了
psi.Domain = "domain"; psi.Verb ="runas"; //if you are using local user account then you need supply your machine name for domain
试试这个简单的片段应该适合你
void Main() { string batchFilePathName =@"drive:\folder\filename.bat"; processstartinfo psi = new processstartinfo(batchFilePathName); psi.Arguments = "arg1 arg2";//if any psi.WindowStyle = ProcessWindowStyle.Hidden; psi.UseShellExecute = false; psi.Verb ="runas"; psi.UserName = "UserName"; //domain\username psi.Domain = "domain"; //domain\username //if you are using local user account then you need supply your machine name for domain psi.WindowStyle = ProcessWindowStyle.Hidden; psi.UseShellExecute = false; psi.Verb ="runas"; Process ps = new Process(psi); Process.Start(ps); }