On 11/26/2015 1:21 AM, Michael Roth wrote:
Quoting Denis V. Lunev (2015-11-25 13:02:26)
From: Yuri Pudgorodskiy <y...@virtuozzo.com>

With previous commit we added gspawn-win64-helper-console.exe,
required for gspawn() mingw implementation.
Unfortunatly when running as a service without interactive
desktop, gspawn() also requires another helper app.

Added gspawn-win64-helper.exe and gspawn-win32-helper.exe
for corresponding architectures.

Signed-off-by: Yuri Pudgorodskiy <y...@virtuozzo.com>
Signed-off-by: Denis V. Lunev <d...@openvz.org>
CC: Michael Roth <mdr...@linux.vnet.ibm.com>
Thanks, applied to qga tree with minor whitespace fixup:

   https://github.com/mdroth/qemu/commits/qga

I noticed something testing this though: if we run qemu-ga
from a console, then exec something like ipconfig with
capture-output: true, qemu-ga returns that output via
guest-exec-status.

If we run it as a service however, there's no output.

# with qemu-ga started via console
{'execute':'guest-exec','arguments':{'path':'/Windows/System32/ipconfig.exe',
'capture-output':true}}
{"return": {"pid": 1644}}
{'execute':'guest-exec-status','arguments':{'pid':1644}}
{"return": {"exitcode": 0, "out-data":
"DQpXaW5kb3dzIElQIENvbmZpZ3VyYXRpb24NCg0KDQpFdGhlcm5ldCBhZGFwdGVyIExvY2FsIEFyZWEgQ29ubmVjdGlvbiAyOg0KDQogICBDb25uZWN0aW9uLXNwZWNpZmljIEROUyBTdWZmaXggIC4gOiANCiAgIExpbmstbG9jYWwgSVB2NiBBZGRyZXNzIC4gLiAuIC4gLiA6IGZlODA6OjMwMDU6NmRjOjNjNmE6NTQ2NCUxNA0KICAgSVB2NCBBZGRyZXNzLiAuIC4gLiAuIC4gLiAuIC4gLiAuIDogMTkyLjE2OC4xMjIuMTQNCiAgIFN1Ym5ldCBNYXNrIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiA6IDI1NS4yNTUuMjU1LjANCiAgIERlZmF1bHQgR2F0ZXdheSAuIC4gLiAuIC4gLiAuIC4gLiA6IDE5Mi4xNjguMTIyLjENCg0KVHVubmVsIGFkYXB0ZXIgaXNhdGFwLns3Q0Q3OTAwQy05NThCLTRBRUMtQkUwRC0yMTNERjM1NjQ2MEZ9Og0KDQogICBNZWRpYSBTdGF0ZSAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gOiBNZWRpYSBkaXNjb25uZWN0ZWQNCiAgIENvbm5lY3Rpb24tc3BlY2lmaWMgRE5TIFN1ZmZpeCAgLiA6IA0KDQpUdW5uZWwgYWRhcHRlciBMb2NhbCBBcmVhIENvbm5lY3Rpb24qIDExOg0KDQogICBNZWRpYSBTdGF0ZSAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gOiBNZWRpYSBkaXNjb25uZWN0ZWQNCiAgIENvbm5lY3Rpb24tc3BlY2lmaWMgRE5TIFN1ZmZpeCAgLiA6IA0K",
"exited": true}}

# wtih qemu-ga started via windows service
{'execute':'guest-exec','arguments':{'path':'/Windows/System32/ipconfig.exe',
'capture-output':true}}
{"return": {"pid": 1176}}
{'execute':'guest-exec-status','arguments':{'pid':1176}}
{"return": {"exitcode": 0, "exited": true}}

Is this expected?


No, we want to fix it somehow - but not now, because the whole picture is not clear yet. Looks like when running gspawn() from a win32 service, some win32 processes open its own console and write stdout to it instead of parent's fd inherited from gspawn-helper.

Not sure whether it can be corrected without patching gspawn() and gspawn-helper code or not. If so, we may consider implementing platform-specific version of guest-exec using win32 api.

Right now the best what can be suggested, it is a workaround: usage of redirection on guest side.

Executing 3 commands in a row do a trick

cmd /c ipconfig >out.txt
cmd /c type out.txt
cmd /c del out.txt

but looks ugly and error-prone.

One more pity notice, it seems that gspawn-helper does incorrect quoting:

cmd /c echo "hello"

produces \"hello\" output instead of expected "hello".
Again, quoting issue may be another point for implementing better win32-specific guest-exec.

I'll share my visions on this problem later after some experiments.


Reply via email to