2017-02-19 11 views
0

私はこのコマンドを持っていますが、これはコマンドラインで直接実行しているときに機能します。Go app経由でIIS appcmdが呼び出されました - 無効なXML入力

import "os/exec" 
... 
out, err := exec.Command("cmd", "/C", `%windir%\system32\inetsrv\appcmd list APP /site.name:"My website" /text:[path='/'].physicalPath`).Output() 

私は囲碁アプリを経由して、それを実行すると、それは、このエラーメッセージが表示されて終了ステータス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を使用します。

実行前にコマンドが破損しているようです。出力コマンドを見る方法はありますか?

+0

問題を/site.name引数(「私のウェブサイト」)に引用符が原因で発生するようです。 http://www.josephspurrier.com/prevent-escaping-exec-command-arguments-in-go/を参照し、Github https://github.com/golang/go/issues/15566で発行してください。 – miloshavlicek

答えて

0

golangライブラリのバグのようです - a Golang Github issue #15566に関連しています。

問題は、エスケープされているはずの/site.name引数( "My website")の引用符によって引き起こされますが、そうであってはいけません。今回の

ソリューションはこれです:

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

関連する問題