2

これは私が数日間戦ってきた問題であり、今では頭がいっぱいです。Wise Installation Studio で MSI を作成していますが、どの MSI オーサリング プログラムでも再現できると思います。私が投稿した MSI、DLL、または WSI ファイルで再現したい人のために、テスト サンプルを作成しました。

  1. 「test.wsi」として保存され、「test.msi」を作成する新しい賢明なソリューションを作成します
  2. 「UI シーケンス」の MigrateFeaturesState アクションの後に 2 つのカスタム アクションを追加する以外は、このファイルには何もしません。
  3. 最初のカスタム アクションは、パラメータを渡さず、リターン コードを無視する「Call DLL From Installation」です。
  4. 2 番目のカスタム アクションは、パラメータを渡さず、リターン コードを無視する「Call Custom DLL From Installation」です。
  5. 両方のアクションは、同じ DLL と同じ関数、helloworld.dll および HelloWorld() 関数を参照し、「HelloWorld」メッセージ ボックスを表示するだけです。

期待される結果: 2 つの Hello World プロンプトと、インストール プロセスを開始するための通常の UI 画面。

これが私の現在のセットアップです: 開発ボックス: - Wise Installation Studio 7.4.0.214 - UAC をオフにして実行する Win7 x64

テスト ボックス: - Windows XP SP3 - Windows インストーラー v4.5.6001.22159 - .Net Framework v4.0

ここに私のテストケースがあります:

  1. ascii ユーザー名を持つ非管理者 - 結果は 'ALLUSERS=""' と ALLUSERS="1" の両方で期待どおりです
  2. 名前 'あくぇえ' に Unicode 文字を含む管理者 - 結果は 'ALLUSERS=""' と ALLUSERS="1" の両方で期待どおりです
  3. 名前に Unicode 文字が含まれる管理者以外のユーザー '发涩' - 最初のプロンプトのみが表示され、2 番目のプロンプトには次のようなエラーが表示されます:「カスタム アクションのエラー。ライブラリ C:\Documents and Settings\??[LongAlphaNumericString]. TMP\WiseCustomCalla.dll が無効であるか、見つかりませんでした。」これは、'ALLUSERS=""' と ALLUSERS="1" の両方で発生します。
  4. 別の管理者でログインし、#3 のユーザーを管理者に設定し、#3 のユーザーで再度ログインすると、期待どおりの結果が得られます。

短いパスを強制し、ユーザー データ フォルダーへの代替パスを渡すことをいじってみましたが、何も機能しません。なぜこれが起こっているのか、それを修正する方法を知っている人はいますか? このテストに使用したすべてのファイルをここに含めました。これには、エラー メッセージのスクリーン ショット、msi および msi.xml、wsi ファイル、helloworld.dll (rundll32 helloworld.dll、HellowWorld でテスト)、および上記の各テスト ケースのログ。

http://dl.dropbox.com/u/1797288/error.zip

#3 が「インストールからカスタム DLL を呼び出す」アクションで正しく機能するように、MSI/WSI ファイルで何を変更する必要がありますか?

ありがとう、アーロンP

4

1 に答える 1

0

問題は、これらの DLL の処理方法が原因であると思います。インストールからの DLL は Binary テーブルに格納され、インストール中に自動的に抽出されます。ネイティブなので、期待通りに動作します。

インストールからカスタム DLL を呼び出すと、インストール中に DLL を抽出するために間違ったパスが使用される可能性があります。管理者以外のユーザーがアクセスできない、マシンごとの場所である可能性があります。

Unicode 文字をサポートするコードページで MSI を構築してみてください (MSI 言語を設定できます)。また、ログを作成して、実際の DLL パスを投稿してみてください。

于 2011-02-15T08:06:02.183 に答える