Fun with argv
paulm at astro.gla.ac.uk
Sat Feb 16 11:32:40 CST 2002
I've been looking at the installer for Office97. You call setup.exe
which runs acmsetup.exe with a bunch of options, specifically:
'E:\~MSSETUP.T\~msstfof.t\acmsetup /T Off97Pro.stf /S "D:\office\" '
Here, I've used single quotes to delimit the string. I'll carry on this
convention because it will get confusing otherwise.
The problem is build_argv() assumes the command line is suitably escaped
(as from a bash command line, for example), and so mangles the above line
to the following values:
But, the fun continues as you can pass arguments to setup.exe, which
augment the arguments passed to acmsetup.exe, so running:
wine setup.exe 'a a' '"b "B'
results in argv for setup.exe being:
setup.exe then calls GetCommandLineA, which returns:
'setup.exe "a a" "\"b \"B"'
and then it tries to exec
'E:\~MSSETUP.T\~msstfof.t\acmsetup /T Off97Pro.stf /S "D:\office\" "a a"
A command line with both unix-style escaped quotes and normal text. The
build_argv result is:
and subsequent call to GetCommandLineA returns:
'E:\~MSSETUP.T\~msstfof.t\acmsetup /T Off97Pro.stf /S "D:\office\" a" "a
What a mess!
More information about the wine-devel