通过 Go 应用程序调用的 IIS appcmd - 无效的 XML 输入

标签 iis go

我有这个命令,直接在命令行中运行时可以使用。

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/

相关文章:

string - 如何读取外部变量

go - 在端点上运行测试之前,无法在BeforeSuit中启动应用程序服务器

php - 两个相互冲突的 X-Powered-By header

java - 无法使用 JSoup 登录到 IIS 登录提示

sqlite - 防止 IIS 对 SQLite 数据库文件保持文件锁定

arrays - 如何使用for循环遍历2D数组

arrays - 在函数参数中接收任何数组类型

google-app-engine - Go例程泄漏在哪里?

iis - 将防伪 token 部署到负载均衡器后无法解密

iis - 此页面无法在 IIS 中显示