Visual Studio中按钮调用CMD执行PsExec远程命令失败求助
解决PsExec远程执行命令的问题
你的代码存在几个关键错误,导致仅打开CMD窗口却无法执行PsExec命令:
- CMD参数缺失
/c:调用cmd.exe时必须添加/c参数,它用于告诉CMD执行后续命令后退出;如果不加,CMD只会打开空白窗口,不会执行你传入的命令。 - PsExec命令顺序错误:正确的PsExec语法是
psexec \\目标机器名 参数 要执行的程序,你把\\{pcName}放在了最前面,完全搞反了命令顺序。 - 未指定PsExec路径(可选):如果PsExec不在系统PATH环境变量中,CMD会找不到该程序,建议直接指定它的完整路径,比如
C:\Tools\PsExec.exe。
修正后的代码:
private void btnPsExec_Click(object sender, EventArgs e) { string pcName = txtPcName.Text; // 修正命令顺序,添加cmd的/c参数,若需要则指定psexec完整路径 string command = $"/c psexec \\\\{pcName} /s cmd"; if (!string.IsNullOrEmpty(pcName)) { try { ProcessStartInfo processInfo = new ProcessStartInfo { FileName = "cmd.exe", Arguments = command, UseShellExecute = true, CreateNoWindow = false, }; using (Process process = new Process()) { process.StartInfo = processInfo; process.Start(); } } catch (Exception ex) { HighlightableMessageBox msgBox = new HighlightableMessageBox("Error", $"An error occurred: {ex.Message}"); msgBox.ShowDialog(); } } else { HighlightableMessageBox msgBox = new HighlightableMessageBox("Input Error", "Please enter a PC name."); msgBox.ShowDialog(); } }
补充提示:
- 若PsExec不在PATH中,把代码里的
psexec替换为完整路径,比如C:\\PsTools\\psexec.exe(注意转义反斜杠)。 - 确保运行程序的账号拥有远程机器的管理员权限,否则PsExec会执行失败。
- 可以添加
/accepteula参数跳过PsExec首次运行的许可协议弹窗,比如修改为psexec \\\\{pcName} /s /accepteula cmd。
内容的提问来源于stack exchange,提问作者M. Buschlen
相关产品推荐
相关产品推荐

