0

私のアプリケーションには、デフォルトのインストールで提供されるショートカットに取って代わるショートカットを持つオプションのコンポーネントが含まれています。このオプションのエクストラがインストールされていない場合、デフォルトのショートカットのみをインストールする方法がわかりません。または、両方に同じ名前を付けて、最善を尽くす必要がありますか? これは、通常のボタンだけでなく、カスタム インストール ツリーでも機能する必要があります。

インストール時にこのエクストラが選択されている場合、メイン アプリケーションの [スタート] メニューのショートカットは代わりにこれを指す必要があり、必要に応じてメイン アプリケーションが自動的に開きます。

InstallShield 2011 Professional を使用しています。

編集:明確にするために-メイン、メインのショートカット、ショートカット付きアドオンの3つのコンポーネントとして持っています。メインのショートカットの状態にできるように、アドオンがインストールされているかどうかを確認する方法がわかりません。確かにそれのための変数がありますか?ドキュメントは非常に質素です。

4

3 に答える 3

1

質問を正しく理解していれば、MIDDLEMAN.EXEがインストールされていない限り、MAIN.EXEはショートカットを取得します。この場合、MIDDLEMAN.EXEがショートカットを取得します。

これは、コンポーネントの存在によって別のコンポーネントの定義が変わるという点で奇妙な問題です。それでも、それは可能です。私が行う方法は、MIDDLEMAN.EXEのコンポーネントを作成し、そのショートカットを定義することです。MAIN.EXE用に別のコンポーネントを作成し、そのショートカットを定義しないでください。

次に、ファイルの原価計算後に実行される即時実行の実行シーケンスで実行されるカスタムアクションを記述します。MIDDLEMAN.EXEがインストールされていないか、インストールされていないかを確認してください。これが当てはまる場合は、ShortCutテーブルに一時的な行を書き込んで、MAIN.EXEのShortCutを定義します。

そこから、ショートカットのサービスを処理するための遅延カスタムアクションを必要とせずに、MSIに残りを処理させることができます。

それでも、アプリケーションの設計を変更することでこれを単純化できないかどうか疑問に思わずにはいられません。基本的に、EXEレベルで依存性注入を実行しようとしていますが、DLLレベルでこれを実行する方が簡単です。言い換えると:

ShortCutオプションDLLを使用したMAIN.EXE

MAIN.EXEは常に呼び出されますが、Optional.DLLが存在する場合は動作が異なります。

于 2011-05-01T12:45:24.330 に答える
0

@Stephen:機能のみがGUIでユーザーに表示され、ユーザーがインストールするものを指定できるため、機能の使用を回避する方法がわかりませんか?

MSIファイルの内部整合性チェッカーに従って検証されないため、この種のソリューションは一般的に好きではありませんが、EXEを1つのコンポーネントにインストールしてから、相互に条件付けする異なるショートカットを持つ2つのコンポーネントをそれぞれ持つことができますエクスクルーシブ。次に、カスタム ショートカットのインストールをトリガーする機能に、カスタマイズされたショートカット コンポーネントをアタッチします。この機能は、GUI で表示できるように設定する必要があります。ショートカットは、ファイルのないコンポーネントにあるため、宣伝されていない必要があります。メンテナンス インストール用の適切なコンポーネントの削除/追加を許可するために、ショートカット コンポーネントに一時フラグを設定する必要がある場合があります。一時的なコンポーネントのコンポーネント条件は、メンテナンス インストール中に再評価され、指定された条件が削除/追加をトリガーするかどうかを確認します。

于 2011-04-30T03:19:08.037 に答える
0

デフォルトのコンポーネントがインストールに含まれていると仮定すると、「余分な」コンポーネントにコンポーネント条件を使用できる可能性があります。次に、他のコンポーネントがインストールされていない場合にのみ、この余分なコンポーネントがインストールされるようにすることができます。つまり、相互に排他的になります。これにより、カスタム ダイアログをより複雑にする機能をいじる必要がなくなります。

于 2011-04-29T21:28:58.327 に答える