4

2 つの機能を持つ InstallShield 2010 (基本 MSI) を使用してインストーラーを作成しています。

最初の機能は次のとおりです。

  • x86 としてコンパイルされたメインの .NET アプリケーション、
  • メインアプリケーションで使用されるいくつかのネイティブ x86 サードパーティ dll (x64 バージョンは利用できません)。

2 番目の機能には、AnyCPU としてコンパイルされた MS Reporting Services の拡張機能である単一のコンポーネントが含まれています。

UI シーケンス中に、InstallScript カスタム アクションを使用して、x86 と x64 の両方のレジストリ ツリーから利用可能なすべての Reporting Services インスタンスを列挙しています。

ユーザーは、拡張機能をデプロイするインスタンスを選択するよう求められます。

選択したインスタンスに基づいて、通常は "C:\Program Files\Microsoft SQL Server\MSSQL.2\Reporting Services" のようなファイル システム内の Reporting Services の実際の場所をレジストリに照会し、この値を MSI プロパティに格納しています。

次に、Set Directory アクションを使用して、コンポーネント (拡張機能) の宛先ディレクトリをその MSI プロパティの値に設定します。

拡張ファイルが間違った場所にインストールされている場合、x64 Reporting Services 用にインストールしようとしていない限り、すべてが完全に正常にインストールされます。MSI プロパティが正しいパス「C:\Program Files\MicroSoft...」に設定されていても (msi ログを確認しました)、システムが自動的に「Program Files (x86)」にリダイレクトされているようです。

この問題を克服する解決策はありますか?

4

3 に答える 3

3

64 ビットの ProgramFiles フォルダーにインストールする必要がある場合は、64 ビットの MSI を使用してください。

于 2009-09-30T21:36:55.607 に答える
0

INSTALLDIRプロパティを ProgramFiles ではなく ProgramFile64 に変更できます。これは、アプリケーションが 32 ビットであるため、パスが C:\ProgramFiles(x86)\Your Company Name\Your Product Name along になるため、目的のパスにインストールするのに役立ちます。これで、コンポーネントを 64 ビット互換にしましたか?

于 2011-02-10T09:16:38.953 に答える
0

最後に、InstallScript カスタム アクションを使用して 64 ビット MSI を作成せずに、この問題を自分で解決しました。

インストールする最初のカスタム アクション:

  • 必要なファイルを目的の場所に手動でコピーします (InstallScript は x64 プログラム ファイルにアクセスできます)。
  • この場所を、この機能のアンインストール時に使用するキー コンポーネントとしてレジストリに保存します。

アンインストールする 2 番目のカスタム アクション:

  • レジストリからインストール場所を読み取ります (この値を取得するためにシステム検索を使用しないでください。これは、WindowsInstaller によって「ProgramFiles (x86)」に自動変換されるためです)。
  • ファイルを削除する
于 2009-10-09T08:11:45.707 に答える