2

私はしようとしていた:

#define CommonAppData {commonappdata}

しかし、それは得られます:

コンパイラ エラー

[ISPP] 式が必要ですが、左中かっこ ("{") が見つかりました。

Inno Setup PreProcessor でこれを達成する方法は?

4

3 に答える 3

3

{commonappdata}コンパイル時に拡張することはできません。つまり、実行時にのみ認識されるため、プリプロセッサの実行時に拡張できません。コンパイルされたインストーラが実行されるマシン上の共通のアプリケーションデータディレクトリを識別します。

たぶん、あなたがその定義をどのように使用するつもりであるかを明確にすることができれば、私たちが助けることができるかもしれません。たとえば、本当に関心があるのがターゲットマシンの共通アプリデータディレクトリではなく、開発者マシンのディレクトリである場合は、おそらく次のように使用できます。

#define CommonAppData GetEnv("COMMONAPPDATA")

ただし、実行時に定数を拡張できるInnoプロパティを設定するためにその定義を使用する場合は、次のように使用する必要があります。

#define CommonAppData "{commonappdata}"

お役に立てれば。

于 2011-03-04T13:15:51.523 に答える
3

#defineプリコンパイル段階の inno setup プリプロセッサ ディレクティブです。これは、C プリプロセッサのように機能します。

プリプロセッサ変数を定義することにより、ispp 定義が解決された後にコンパイラにスクリプトを表示させます。

Inno Setup Preprocessor (ISPP) は、Jordan Russell の Inno Setup コンパイラのアドオンです。より技術的に言えば、これは GUI (Inno Setup スクリプト) とコンパイラの間の追加レイヤーであり、テキストを渡す前に、スクリプト テキスト内の特別なディレクティブを使用して指示された方法でインターセプトおよび変更します。

そうは言っても、ドキュメントでソースを見つけることはできず、ソース コードを掘り下げる時間もありませんが、このプリコンパイル時に使用できないセットアップ変数はないと確信しています。

定義された変数に文字列を含めるだけの場合{commonappdata}は、ソースで直接使用します...定義された変数にcommonappdataの実行時の値を持たせたい場合、その値は現在の値はターゲット マシン (Windows のバージョン、言語など) によって異なるため、実行時に決定されます。

よく考えてみると、プリコンパイル時またはコンパイル時にその値を使用しようとするのは意味がありません...これは{commonappdata}{destdir}などのセットアップ定数を存在させないという事実全体です...コンパイル時に標準的な方法で、不明だが意味のある値を表現できます。この値は実行時に認識され、評価されます。

于 2011-02-21T16:56:37.797 に答える
1

おそらく中括弧をエスケープする必要があります。何かのようなもの:

#define CommonAppData {{commonappdata}
于 2011-02-18T17:58:57.470 に答える