Archive: Bug? ReadINIStr path param can't have quotes


Bug? ReadINIStr path param can't have quotes
I'm trying to use ReadINIStr like this,

ReadINIStr $R2 "$INI_PATH" foo InstDir

and I'm getting the value of $INI_PATH via the widely-used GetParameterValue function for reading from the cmdline. When I log the value of INI_PATH that I get this way, it's

"C:\DOCUME~1\DPBLUE~1\LOCALS~1\Temp\inst.ini"

I just tried two alternative ways of setting $INI_PATH using $TEMP and $PROFILE, like this:

StrCpy $INI_PATH "$TEMP\inst.ini"

StrCpy $INI_PATH "$PROFILE\Local Settings\Temp\inst.ini"

Using $TEMP, ReadINIStr succeeded, and the value of INI_PATH was logged as:

C:\DOCUME~1\DPBLUE~1\LOCALS~1\Temp\inst.ini

And using $PROFILE, ReadINIStr again succeeded, and the value of INI_PATH was logged as:

C:\Documents and Settings\dpbluegreen7\Local Settings\Temp\inst.ini

So the problem appears to be the double-quotes around the path that I get from GetParameterValue.

This led me to think that the double-quotes around $INI_PATH in the ReadINIStr call might be the problem,

ReadINIStr $R2 "$INI_PATH" foo InstDir

but removing those quotes still led to an error.

When I re-add the quotes around $INI_PATH in the ReadINIStr call, and strip the quotes from the value I get from GetParameterValue like this,

StrLen $LEN_WO_QUOTES $INI_PATH
IntOp $LEN_WO_QUOTES $LEN_WO_QUOTES - 2
StrCpy $INI_PATH $INI_PATH $LEN_WO_QUOTES 1

it works!

This seems like a bug in ReadINIStr. We were using 2.0 when this problem was discovered, but I just tried 2.04 and have the same problem.


It's not a bug with ReadINIStr. The path with the quotes is invalid. A path can't contain quotes. When you use:

ReadINIStr $R2 "$INI_PATH" foo InstDir
you simply tell NSIS that everything between the quotes is the path. The quotes are not considered a part of the path. The quotes are used to group several words, separated with spaces, into one parameter.