これは私が数日間戦ってきた問題であり、今では頭がいっぱいです。Wise Installation Studio で MSI を作成していますが、どの MSI オーサリング プログラムでも再現できると思います。私が投稿した MSI、DLL、または WSI ファイルで再現したい人のために、テスト サンプルを作成しました。
- 「test.wsi」として保存され、「test.msi」を作成する新しい賢明なソリューションを作成します
- 「UI シーケンス」の MigrateFeaturesState アクションの後に 2 つのカスタム アクションを追加する以外は、このファイルには何もしません。
- 最初のカスタム アクションは、パラメータを渡さず、リターン コードを無視する「Call DLL From Installation」です。
- 2 番目のカスタム アクションは、パラメータを渡さず、リターン コードを無視する「Call Custom DLL From Installation」です。
- 両方のアクションは、同じ 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
ここに私のテストケースがあります:
- ascii ユーザー名を持つ非管理者 - 結果は 'ALLUSERS=""' と ALLUSERS="1" の両方で期待どおりです
- 名前 'あくぇえ' に Unicode 文字を含む管理者 - 結果は 'ALLUSERS=""' と ALLUSERS="1" の両方で期待どおりです
- 名前に Unicode 文字が含まれる管理者以外のユーザー '发涩' - 最初のプロンプトのみが表示され、2 番目のプロンプトには次のようなエラーが表示されます:「カスタム アクションのエラー。ライブラリ C:\Documents and Settings\??[LongAlphaNumericString]. TMP\WiseCustomCalla.dll が無効であるか、見つかりませんでした。」これは、'ALLUSERS=""' と ALLUSERS="1" の両方で発生します。
- 別の管理者でログインし、#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