我正在構建遠程重啟 Windows 服務的功能,但我在代碼中構建的字符串命令沒有返回所需的輸出,從 IDE 調試時復制相同的命令并在 CMD 上運行它成功執行。我嘗試從使用方法 Process cmdOutput Runtime.getRuntime().exec(command) 更改為 Process cmdOutput Runtime.getRuntime().exec(command[]) 我嘗試以不同的方式操作我的字符串命令以查看它是否需要它沒有成功。我在 StackOverflow 上看過類似的問題,但沒有人遇到過我正在經歷的問題public void startService(int serviceId, String serviceName, String ipAddress) { CMDExecutor executor = new CMDExecutor(); try { String command = "cmd /C echo "+ password +" runas /user:"+ username +" "+ "\""+ System.lineSeparator() +" sc\\\\" +ipAddress+ " start "+ serviceName + "\""; String result = executor.getCMDResult(command); logger.info(result);}public class CMDExecutor {public String getCMDResult(String command) throws IOException { Process cmdOutput; cmdOutput = Runtime.getRuntime().exec(command); StringWriter writer = new StringWriter(); IOUtils.copy(cmdOutput.getInputStream(), writer, "UTF-8"); return writer.toString(); }}我期待以下SERVICE_NAME: serviceName TYPE : 10 WIN32_OWN_PROCESS STATE : 2 START_PENDING (NOT_STOPPABLE, NOT_PAUSABLE, IGNORES_SHUTDOWN) WIN32_EXIT_CODE : 0 (0x0) SERVICE_EXIT_CODE : 0 (0x0) CHECKPOINT : 0x0 WAIT_HINT : 0x7d0 PID : 34916 FLAGS :我得到了命令的一部分,但沒有任何變化,服務沒有啟動。
1 回答

慕田峪9158850
TA貢獻1794條經驗 獲得超7個贊
經過幾個小時的努力,簡單的解決方案是將命令分為兩部分,憑證部分和 sc 命令部分,如下所示?,F在它按預期工作。
附言。我選擇從命令中刪除 echo 以避免在日志文件中打印憑據。
public void startService(int serviceId, String serviceName, String
ipAddress) {
CMDExecutor executor = new CMDExecutor();
try {
String credentialsCommand = "cmd /C echo "+ password +" runas /user:"+ username;
String startServiceCommand = "sc\\\\" +ipAddress+ " start "+ serviceName";
String credentialsResult = executor.getCMDResult(credentialsCommand );
logger.info(credentialsResult );
String startServiceResult= executor.getCMDResult(startServiceCommand );
logger.info(startServiceResult);
}
添加回答
舉報
0/150
提交
取消