他の人のインストールスクリプトを変更しているので、InstallShield(2009)/InstallScriptをその場で理解しようとしています。
インストール手順中のダイアログの1つには、以前は1つのテキストボックスがあり、特定のデータベース名を想定してSQLServerインスタンスを要求していました。これで、デフォルトだけでなく任意のデータベース名を選択できるようにする拡張が完了しました。ユーザーが選択したDB名を入力できるように、このダイアログにフィールドを追加する必要があります。モンキーシー、モンキードゥ、新しいコントロールを作成し、フォームが最初のテキストボックスに持っていた機能を複製して適応させるだけです-十分に簡単ですよね?
うーん...ここに問題があります。「SdShowDlgEdit1」フォームは、InstallShieldに同梱されている一般的なもののようで、1つのテキストボックスが必要なダイアログがある場合はどこでも使用されます。そのフォームを変更すると、それが呼び出されるすべての場所で変更されます...これで、以前は1つのテキストボックスがあった場所に、インストール全体に偽の2番目のテキストボックスが表示されます。
おっと。変更を元に戻し、参照を「SdShowDlgEdit2」に変更します。これは、ご想像のとおり、2つのテキストボックスを必要とするダイアログ用のInstallShieldの標準形式です。前の開発者が私の前に来て、フォルダパスを含めるために2番目のテキストボックスが必要な場所のフォームに「参照」ボタンを追加したことを除いて、これは素晴らしいことです。その「閲覧」ボタンは必要ないので、削除できません。
だから、私は自分のカスタムフォームを作成して、他の人の足を引っ張らないようにしないのはなぜだと思いますか?そこで、フォームのクローンを作成し、新しいインスタンスの名前を「EnterDbDetails」に変更し、「参照」ボタンを削除して、フォームを適切に表示します。
次に、InstallScriptに戻って「EnterDbDetails」にリダイレクトし、EzDefineDialog
関数でフォームの「リソースID」を渡す必要があることを確認します。さて、また何でしたか... 12018 ...素晴らしい...必要なすべての詳細を入力し、コンパイルし、ビルドして、それを回転させます。見た目は素敵です。正しいデフォルト値はすべて2つのテキストボックスに入力されていますが、ちょっと!なぜそこに参照ボタンがあるのですか?そして、なぜラベルのテキストが私が設定したものではないのですか?
InstallScriptに戻り、リソースIDを確認します。元の「SdShowDlgEdit2」のリソースIDも12018であることがわかります。これは、それをうまく説明しています。InstallShieldを使用すると、同じIDを持つ2つのフォームを作成できますが、何でもかまいません...では、「EnterDbDetails」フォームに戻ってIDを変更しましょう...
...しかし、Resource Identifierプロパティは読み取り専用です! WTF?
そのため、現在は標準フォームを使用できず、リソースIDを変更できないため、カスタムフォームを使用できません。
私は困惑しています。誰かがあなたがこのようなことをすることになっている方法を説明できますか?それは本当に世界で最も単純なことであるべきです?