Hi everyone, 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: 'E:\~MSSETUP.T\~msstfof.t\acmsetup' '/T' 'Off97Pro.stf' '/S' 'D:\office" ' 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' 'a a' '"b "B' 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" "\"b \"B"' A command line with both unix-style escaped quotes and normal text. The build_argv result is: 'E:\~MSSETUP.T\~msstfof.t\acmsetup' [...] '/S' 'D:\office" a' 'a "b' '"B' and subsequent call to GetCommandLineA returns: 'E:\~MSSETUP.T\~msstfof.t\acmsetup /T Off97Pro.stf /S "D:\office\" a" "a \"b" \"B' What a mess! >From what I can see, the problem is ENV_BuildCommandLine build a command line that is \-escaped (" => \" and \ => \\). Windows programs might use this as part of a WinExec call (as above), which in general is not \-escaped. The only way around this problem (I could think of) is to stop ENV_BuildCommandLine from \-escaping the command line. This implies that we cannot accept double-quotes on the command line as part of an argument. I have a patch which is a hack-and-slash to remove the \-escaping and the resulting build processes arguments consistently (and Office97 setup gets a bit further). However, someone's obviously gone to the trouble of coding in support for double-quotes, so is this needed? Is there an alternative solution? Cheers, Paul.