在[RUN]部分中带引号的inno设置参数

dav*_*per 22 configuration inno-setup

我使用[run]部分使用支持commandeline的commandmerit.exe修改某些编解码器的优值.

所以语法是:

Commandmerit.exe "{E2B7DF46-38C5-11D5-91F6-00104BDB8FF9}" "0x800000"  
Run Code Online (Sandbox Code Playgroud)

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

Filename: "{app}\Commandmerit.exe"; Parameters: ""{F8FC6C1F-DE81-41A8-90FF-0316FDD439FD}" "0x10000000""; WorkingDir: "{app}"
Run Code Online (Sandbox Code Playgroud)

显示流动错误:

参数的状态不匹配或错位.

如果我把这一行:

Filename: "{app}\Commandmerit.exe"; Parameters: """{F8FC6C1F-DE81-41A8-90FF-0316FDD439FD}" "0x10000000"""; WorkingDir: "{app}"
Run Code Online (Sandbox Code Playgroud)

显示流动错误:

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

如果我把这一行:

Filename: "{app}\Commandmerit.exe"; Parameters: """{{F8FC6C1F-DE81-41A8-90FF-0316FDD439FD}}" "0x10000000"""; WorkingDir: "{app}"
Run Code Online (Sandbox Code Playgroud)

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

Dea*_*nna 36

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

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

Filename: "{app}\Commandmerit.exe"; Parameters: """{F8FC6C1F-DE81-41A8-90FF-0316FDD439FD}"" ""0x10000000"""; WorkingDir: "{app}"
Run Code Online (Sandbox Code Playgroud)


jac*_*ate 5

在您的问题中,我可以看到两件事。

首先,{在inno设置中具有特殊含义,因为它是常量的开始。因此,您必须{通过将其加倍来逃避,例如{{。不需要退出右括号,因为仅当它是该常数的开始时,它才被视为常数的结尾。

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

说了这么多,您必须尝试像这样编写命令:

[run]
Filename: "{app}\Commandmerit.exe"; Parameters: {{F8FC6C1F-DE81-41A8-90FF-0316FDD439FD} 0x10000000; WorkingDir: "{app}"
Run Code Online (Sandbox Code Playgroud)

  • 如果需要在引号中加上引号,请将所有引号都加倍:`Parameters:“”“ {F8FC6C1F-DE81-41A8-90FF-0316FDD439FD}”“”“ 0x10000000”“”;` (2认同)