加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

如何在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);  
}

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读