我正在尝试使用psExec从我在IIS服务器上发布的ASP Web应用程序连接到某些服务器,启动应用程序并获取输出。
当我尝试在没有设置凭据的情况下启动进程时,我收到此错误:
访问被拒绝
但如果我和管理员做同样的事情,我只会得到输出,错误和异常变量的空字段。此外,当我使用visual studio从我的本地电脑上进行操作时,它可以正常工作。
我做错了什么?这是我的代码:
try
{
Process p = new Process();
p.StartInfo.UseShellExecute = false;
p.StartInfo.RedirectStandardOutput = true;
p.StartInfo.RedirectStandardError = true;
p.StartInfo.StandardOutputEncoding = Encoding.GetEncoding(866);
p.StartInfo.StandardErrorEncoding = Encoding.GetEncoding(866);
p.StartInfo.FileName = @"C:\inetpub\wwwroot\Monitoring\bin\PsExec.exe";
server = "dp-next.b42";
p.StartInfo.Arguments = @" \\" + server + " \"c:\\program files\\omniback\\bin\\omnirpt.exe\" -report list_sessions -timeframe 12 12";
p.StartInfo.UserName = "admin";
p.StartInfo.Domain = "domain";
string pass = "password";
SecureString s = new SecureString();
foreach(char c in pass)
{
s.AppendChar(c);
}
p.StartInfo.Password = s;
p.StartInfo.CreateNoWindow = true;
p.StartInfo.WindowStyle = ProcessWindowStyle.Hidden;
p.Start();
output = output + p.ProcessName;
//output = p.StandardOutput.ReadToEnd();
while ((res = p.StandardOutput.ReadLine()) != null)
{
i++;
output = output + res;
}
errors = p.StandardError.ReadToEnd();
p.Close();
}
catch (Exception ex)
{
exe = ex.ToString();
}
答案 0 :(得分:0)
我曾经不得不开发一些非常相似的东西。这就是我做的。
而不是使用:
p.StartInfo.UserName = "admin";
p.StartInfo.Domain = "domain";
p.StartInfo.Password = s;
我将用户名和密码直接放在PsExec命令参数中(分别用-u
和-p
)。在你的情况下:
p.StartInfo.Arguments = @" \\" + server + " -u YOUR_DOMAIN\\YOUR_USERNAME -p YOUR_PASSWORD \"c:\\program files\\omniback\\bin\\omnirpt.exe\" -report list_sessions -timeframe 12 12";
有关PsExec使用情况的更多信息here。