4

次のコードを使用すると問題が発生します。余分な「{」が追加されています。

例えば:

[Setup]
AppID={{E643099E-1ECE-474F-B043-1E7A7CE405AA}

[Code]
const
  INSTALL_KEY = 'Software\Microsoft\Windows\CurrentVersion\Uninstall\{#emit SetupSetting("AppId")}_is1';

以下を返します。

INSTALL_KEY = 'Software\Microsoft\Windows\CurrentVersion\Uninstall\{{E643099E-1ECE-474F-B043-1E7A7CE405AA}_is1';

実際のパスにない余分な「{」が原因で、RegKeyExists(HKLM, INSTALL_KEY) でそのキーを検出することは明らかに機能しません。[Setup] で余分な文字を削除すると、スクリプトはコンパイルされません。それは定数だと思います。

4

5 に答える 5

1

StringChange()余分なものを削除するために使用します{:

[Setup]
AppID={{E643099E-1ECE-474F-B043-1E7A7CE405AA}

[Code]
const INSTALL_KEY = '...\Uninstall\{#emit StringChange(SetupSetting("AppId"),"{{","{")}_is1';
于 2013-09-25T14:37:28.453 に答える
1

この問題は、Inno Setup (5.5.5) の以降のバージョンでは解決されているようです。次のコードは問題なく動作します。

[Setup]

AppId={{********-****-****-****-********}
...

[code]

sAppId := ExpandConstant('{#emit SetupSetting("AppId")}_is1');
sUnInstPath := ExpandConstant('Software\Microsoft\Windows\CurrentVersion\Uninstall\') + sAppId;
于 2015-09-02T21:21:38.650 に答える
1

パーサーは、文字で囲まれたカスタム定数の使用を許可していないと思います。{}それらは のイントロダクターとして使用されるためthe constantsです。オプションの 1 つを次に示します。

[Setup]
AppID=E643099E-1ECE-474F-B043-1E7A7CE405AA

[code]
const
  INSTALL_KEY = '...\Uninstall\{{#emit SetupSetting("AppId")}}_is1';

私の推測では、あなたが説明したケースは予期しないバグにすぎません.コンパイラは定数の先頭で二重括弧を使用するように求めますが、そのような定数を発行すると同じ二重括弧で戻ってきます.

于 2012-04-24T19:32:06.403 に答える
1

ExpandConstant解決策は、他の人がすでに述べたように関数を使用することです。

[Setup]
AppId={{E643099E-1ECE-474F-B043-1E7A7CE405AA}
[Code]
var
  INSTALL_KEY: String;

function InitializeSetup(): Boolean;
begin
  INSTALL_KEY := ExpandConstant('Software\Microsoft\Windows\CurrentVersion\Uninstall\{#SetupSetting("AppId")}_is1');
  MsgBox(INSTALL_KEY, mbInformation, MB_OK);
end;

これは予期された動作であり、バグではありません。[Code]セクションでは、定数スクリプト化された定数は、プリプロセッサ ディレクティブを 発行している間は展開されません{#emit ...}/ {#...}ISPP によってそれらの値に置き換えられます。そのため、 ExpandConstant 関数を使用して に変換する必要があり{{ます{

この場合、関数が使用されるINSTALL_KEYため、パスカル定数として定義することはできません。ExpandConstant

于 2019-11-20T02:09:43.263 に答える