26

我使用[Run]部分来修改一些commandmerit.exe支持命令行的编解码器的优点值。

所以语法是:

Commandmerit.exe "{E2B7DF46-38C5-11D5-91F6-00104BDB8FF9}" "0x800000"  

{E2B7DF46-38C5-11D5-91F6-00104BDB8FF9}是编解码器的 CLSID 并且 0x800000是新优点的值,但是当我将这一行放在[Run]section 中时:

Filename: "{app}\Commandmerit.exe"; Parameters: ""{F8FC6C1F-DE81-41A8-90FF-0316FDD439FD}" "0x10000000""; WorkingDir: "{app}"

显示流动错误:

参数上的引号不匹配或放错了位置。

如果我把这一行:

Filename: "{app}\Commandmerit.exe"; Parameters: """{F8FC6C1F-DE81-41A8-90FF-0316FDD439FD}" "0x10000000"""; WorkingDir: "{app}"

显示流动错误:

未知常数......使用两个连续的“{”如果......

如果我把这一行:

Filename: "{app}\Commandmerit.exe"; Parameters: """{{F8FC6C1F-DE81-41A8-90FF-0316FDD439FD}}" "0x10000000"""; WorkingDir: "{app}"

然后没有显示错误但似乎commandmerite.exe不理解参数,所以安装程序完成后优点仍然没有改变。

4

2 回答 2

47

要将引号添加到参数,您必须将每个引号加倍,然后在整个值周围加上引号。

您的第二次尝试很接近,但您忘记了中间的尝试。

Filename: "{app}\Commandmerit.exe"; Parameters: """{F8FC6C1F-DE81-41A8-90FF-0316FDD439FD}"" ""0x10000000"""; WorkingDir: "{app}"
于 2013-04-05T10:10:13.110 回答
5

我可以在您的问题中看到两件不同的事情。

首先,{在 inno setup 中具有特殊含义,因为它是常量的开始。所以,你必须{通过加倍来逃避,例如{{。不需要转义右括号,因为只有当它是该常量的开始时,它才会被视为常量的结尾。

其次,是你试图"作为字符串的一部分传递,但在这种情况下似乎没有必要,因为"命令行参数中字符的目的是允许在单个参数中使用空格,但没有你的参数有空格。

综上所述,您必须尝试像这样编写命令:

[run]
Filename: "{app}\Commandmerit.exe"; Parameters: {{F8FC6C1F-DE81-41A8-90FF-0316FDD439FD} 0x10000000; WorkingDir: "{app}"
于 2013-04-04T21:04:08.220 回答