我正在尝试使用Process类执行批处理文件。此代码位于代码的较大部分中间,我使用LogonUser()和WindowsIdentity.Impersonate()来模拟本地PC管理员帐户。
我试图在Process中运行批处理文件,而不在ProcessStartInfo中添加凭据,但这样做会导致批处理文件无提示失败 - 没有引发错误,并且从未返回批处理文件的预期输出(我正在异步地阅读stderr和stdout,fwiw)。
然后我将凭据添加到ProcessStartInfo,但是如果我没有先调用WindowsImpersonationContext.Undo(),并且“登录失败:未知用户名或密码错误”错误,现在我收到“访问被拒绝”错误在Process.Start()之前调用.Undo()。对于多个帐户,我已经三次检查用户名/密码/域名是否正确。
如果我的代码没有LogonUser()或WindowsIdentity.Impersonate()调用(并且没有ProcessStartInfo中的凭据),那么批处理文件的执行和输出的批处理文件没有问题。
我能够成功地从桌面运行批处理文件,作为本地管理员或任意本地用户帐户。我可以看到它的权限显示它应该是我试图运行它的帐户可读/可执行。这真是个傻瓜;任何帮助表示赞赏。
答案 0 :(得分:0)
你在找这样的东西吗?
Process proc = new Process();
proc.StartInfo.FileName = @"C:\WINNT\notepad.exe";
proc.StartInfo.UseShellExecute = false;
proc.StartInfo.CreateNoWindow = true;
proc.StartInfo.Domain = "mydomain.com"; // Domain of IIS Computer
proc.StartInfo.UserName = "kaung"; //Administrator for that computer
System.Security.SecureString password = new System.Security.SecureString();
password.AppendChar('m'); //Password
password.AppendChar('y');
password.AppendChar('p');
password.AppendChar('a');
password.AppendChar('s');
password.AppendChar('s');
password.AppendChar('w');
password.AppendChar('o');
proc.StartInfo.Password = password;
proc.Start();
答案 1 :(得分:0)
问题是我需要重定向所有3个流;我只重定向2(out,err,not in)。这基本上解决了问题。