2011-06-16 67 views
1

我真的很新的C#和我想我可能有我的程序问题。所以我想让程序运行,它有1个按钮来重新启动远程机器,并输入一个文本框来输入机器名称(Windows XP SP3环境)。这是我有的代码,它不重新启动机器。我不想使用psexec,除非我可以从程序本身调用psexec b/c我希望这是一个动态程序。长话短说它提出了CMD提示,但由于某种原因,该机器不重新启动(我有远程机器的权限)...任何建议将不胜感激,因为它的概率简单,我忽略了。c#重新启动远程机器,主机名是文本框

代码:

using System; 
using System.Collections.Generic; 
using System.ComponentModel; 
using System.Data; 
using System.Drawing; 
using System.Linq; 
using System.Text; 
using System.Windows.Forms; 
using System.Diagnostics; 
namespace Tool 
{ 
    public partial class Form1 : Form 
    { 
     public Form1() 
     { 
      InitializeComponent(); 
     } 

     private void Form1_Load(object sender, EventArgs e) 
     { 

     } 

     private void btnReboot_Click(object sender, EventArgs e) 
     { 
      string hostname; 
      hostname = textBox1.Text; 
      Process.Start("shutdown", "-r -f \\\\"+ hostname); 
     } 
    } 
} 

回答

0

不应该是什么?

“关断”, “/ R/F /米\\” +主机名

+0

是的,如果你需要启动关机远程计算机,它应该与/ m – 2011-06-16 13:58:24

+0

谢谢大家的帮助,但是我已更正为Process.Start(“关机”,“/ r/f/m”+主机名) ;它仍然没有重新启动机器,还有其他想法? – ryan 2011-06-16 14:47:30

0

尝试

Process.Start("shutdown", "-r -f -m \\\\\"+ hostname); 

-m是用于在远程机器

0

我的开关不知道你们有什么问题,但它可能是“访问被拒绝”,如果你试图在远程机器上获得c $,并且他们正在执行你正在执行的程序,你可以获得访问权限:

net use \\computername\c$ password /USER:administrator 
0

你可以试试这个:

var process = new Process(); 
var startInfo = new ProcessStartInfo 
{ 
    FileName = "cmd.exe", 
    Arguments = "/c\"" + string.Format("shutdown /m \\\\{0} /f /t 00 /r", textBox1.Text) + "\"" 
}; 
process.StartInfo = startInfo; 
process.Start(); 

,而不是执行关机直接它将启动一个提示,在提示执行命令,就像你会做手工。

您可以添加

WindowStyle = ProcesswindowStyle.Hidden 

到的ProcessStartInfo初始化隐藏DOS窗口弹出。