如何在C#中运行具有所需权限的bat文件
发布时间:2020-12-15 21:29:40 所属栏目:百科 来源:网络整理
导读:我有一个bat文件,可以将文件从一个位置复制到另一个位置. SET SRC=%1SET DEST=%2xcopy /Y/I %SRC%*.txt %DEST%tempecho Done! 我正在尝试通过C#程序运行此文件 var psi = new ProcessStartInfo(fileToRun);psi.Arguments = args;psi.RedirectStandardOutpu
我有一个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:folderfilename.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"; //domainusername psi.Domain = "domain"; //domainusername //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); } (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |