Go 如何通过exec os/exec执行sc create命令?
如何通过Go 如何通过exec os/exec执行sc create命令?,go,service,cmd,exec,sc,Go,Service,Cmd,Exec,Sc,如何通过exec.command执行我的sc命令 代码: cmd := exec.Command("cmd.exe", "sc", "create", "Simpler", "binpath="+os.Getenv("APPDATA")+"\\Simpler\\cc.exe", "displayname=MY SERVICE"); cmd.SysProcAttr = &syscall.SysProcAttr{HideWindow: true}; out, _ := cmd.Output(
exec.command
执行我的sc
命令
代码:
cmd := exec.Command("cmd.exe", "sc", "create", "Simpler", "binpath="+os.Getenv("APPDATA")+"\\Simpler\\cc.exe", "displayname=MY SERVICE");
cmd.SysProcAttr = &syscall.SysProcAttr{HideWindow: true};
out, _ := cmd.Output(); fmt.Println(string(out))
这是我在命令提示符下得到的(在当前命令提示符下打开命令提示符--):
无法执行以下命令。我什么也没得到!问题在哪里
如果在当前命令提示符下执行sc.exe
,则命令已启动,但如果在新命令提示符下执行,则命令未启动
也就是说,如果我删除了第一个参数“cmd.exe”,我的程序就成功地执行了,结果是异常的。但是如何在新窗口中执行呢?好吧,眼前的问题是,你所做的不是告诉你如何执行一个外部命令以使它执行一个命令,你应该传递
cmd.exe
或者/K
命令行选项,
喜欢
您在调用中观察到的是cmd.exe
忽略了
其余的参数传递给它,然后运行,这就是
正是你所观察到的
首先研究cmd.exe/?
的输出和
内置Windows帮助系统,以便更好地了解其工作原理
下一个问题是,绝对没有理由让cmd.exe
参与运行sc
——直接运行sc
,而不是跳转cmd.exe
,让它执行sc
下一个问题是您忽略了返回的错误值
通过调用os/exec.Cmd.Output
。既然去(幸运的)不去
如果有例外,处理所有错误值至关重要
重要的是,最好忽略其他一切,但不要忽略
错误。
如果您正在编写高度实验性的代码,您可能会
从一个愚蠢的助手开始,比如
func check(err error) {
if err != nil {
panic(err)
}
}
然后像这样滚动
out, err := cmd.Output()
check(err)
此方法不适用于生产等级代码,但允许
为了在实验时更快地进行代码转换
您也可以考虑直接调用Win32 API到 管理服务,因为它将进行错误处理
更简单。好吧,眼前的问题是,你要做的不是告诉你如何执行一个外部命令,让它执行一个,你应该通过
cmd.exe
或者/K
命令行选项,
喜欢
您在调用中观察到的是cmd.exe
忽略了
其余的参数传递给它,然后运行,这就是
正是你所观察到的
首先研究cmd.exe/?
的输出和
内置Windows帮助系统,以便更好地了解其工作原理
下一个问题是,绝对没有理由让cmd.exe
参与运行sc
——直接运行sc
,而不是跳转cmd.exe
,让它执行sc
下一个问题是您忽略了返回的错误值
通过调用os/exec.Cmd.Output
。既然去(幸运的)不去
如果有例外,处理所有错误值至关重要
重要的是,最好忽略其他一切,但不要忽略
错误。
如果您正在编写高度实验性的代码,您可能会
从一个愚蠢的助手开始,比如
func check(err error) {
if err != nil {
panic(err)
}
}
然后像这样滚动
out, err := cmd.Output()
check(err)
此方法不适用于生产等级代码,但允许
为了在实验时更快地进行代码转换
您也可以考虑直接调用Win32 API到 管理服务,因为它将进行错误处理
更简单。有点晚了,而且不太适合运行sc.exe。虽然在回答@ KOSITX提供中解决了使用SC.EXE的问题,但我发现您正在尝试创建一个GO应用程序的服务,并将其视为XY问题。 调用
sc.exe
不太可能成功创建windows服务。但是,有一个库可以提供帮助:golang.org/x/sys/windows/svc
github上也有一个例子:有点晚了,实际上并不是关于运行sc.exe。虽然在回答@ KOSITX提供中解决了使用SC.EXE的问题,但我发现您正在尝试创建一个GO应用程序的服务,并将其视为XY问题。 调用
sc.exe
不太可能成功创建windows服务。但是,有一个库可以提供帮助:golang.org/x/sys/windows/svc
github上还有一个例子:注意,在您的案例中根本不需要
cmd.exe
。注意,在您的案例中根本不需要cmd.exe
。