我有这个命令,直接在命令行中运行时可以使用。
import "os/exec"
...
out, err := exec.Command("cmd", "/C", `%windir%\system32\inetsrv\appcmd list APP /site.name:"My website" /text:[path='/'].physicalPath`).Output()
当我通过 Go 应用程序运行它时,它会抛出 exit status 3222072890 并显示以下错误消息:
Failed to process input: Invalid XML input - please make sure that your XML is well-formed and follows the required format (HRESULT=c00cee3a).
我已经尝试过更改斜线,使用各种引号,但仍然不起作用。
我在 Windows Server 2012 R2 上使用 IIS 8.5。
似乎命令在执行前已损坏。有什么办法可以看到输出命令吗?
最佳答案
这似乎是 golang 库中的错误 - 与 a Golang Github issue #15566 相关.
问题是由/site.name 参数(“我的网站”)中的引号引起的,它被转义了,但不应该被转义。
这次的解决方案是这样的:
import "os/exec"
import "syscall"
...
cmd := exec.Command(`cmd`)
cmd.SysProcAttr = &syscall.SysProcAttr{
CmdLine: `/C %windir%\system32\inetsrv\appcmd list APP /site.name:"My website" /text:[path='/'].physicalPath`,
}
out, err := cmd.Output()
有关详细信息,请参阅:http://www.josephspurrier.com/prevent-escaping-exec-command-arguments-in-go/和 exec with double quoted argument
关于通过 Go 应用程序调用的 IIS appcmd - 无效的 XML 输入,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42327117/