2016-03-16 62 views
1

我试图通过psexec工具启动远程命令,它在命令提示符下运行成功。然而,在C#中,我得到以下输出错误:Psexec在c#代码中返回访问被拒绝错误

Access is denied

。 这里是我的命令:

psexec \servername -u xxxxxxx -p xxxxxxxxxx -h -w "E:\" cmd /C "(dir)" ^> file.txt

这里是我的C#源:

ProcessStartInfo PSI = new ProcessStartInfo(); 
PSI.FileName = "cmd.exe"; 
PSI.RedirectStandardInput = true; 
PSI.RedirectStandardOutput = true; 
PSI.RedirectStandardError = true; 
PSI.UseShellExecute = false; 
PSI.CreateNoWindow = true; 
PSI.WindowStyle = ProcessWindowStyle.Hidden; 
PSI.Arguments = "psexec " + @"\\servername -u xxxxxx -p xxxxxxxxx -h -w "+"\"E:\\\\\" "+"cmd /C " +"\""+"(dir)"+ "\" " +"^> file.txt" ; 
p.Start(); 
p.WaitForExit(); 
output = p.StandardOutput.ReadToEnd().ToString(); 
error = p.StandardError.ReadToEnd().ToString(); 
+0

尝试使用psexec开关“-s”,这将运行在系统帐户下的命令,这与运行它提升相同。 –

+0

感谢您的帮助,但即使通过添加-s,问题仍然存在。 –

回答

0

对不起,我不能评论呢!

阅读你的C#+ PSEXEC代码,看起来它发送 psexec \servername -u xxxxxxx -p xxxxxxxxxx -h -w "E:\\" cmd /C "(dir)" ^> file.txt到命令提示符

不是应该"psexec " + @"\\servername -u xxxxxx -p xxxxxxxxx -h -w "+"\"E:\\\" "+"cmd /C " +"\""+"(dir)"+ "\" " +"^> file.txt";结束与psexec \servername -u xxxxxxx -p xxxxxxxxxx -h -w "E:\" cmd /C "(dir)" ^> file.txt

为了测试我建议你创建一个字符串,它将接收这些值然后显示它,只是为了确定是否设置了正确的命令。

另一件事是PSI.UseShellExecute = false;,我知道一些命令代码必须有这个设置false才能工作,但我不知道psexec,你是否也试图将它设置为true?

+0

这不是路易斯的问题。对于该命令,c#字符串被正确写入。我已经测试过了。对于UseShellExecute,当我将其更改为true时,程序将引发此异常:为了重定向IO流,Process对象必须将UseShellExecute属性设置为false。 –