2009-07-31 10 views
11

私のアプリケーションがアンインストールされると、クライアントに割り当てられたライセンスキーを解放できるようにサーバーに通知する必要があります。これは、Webサービスコールを介して行われます。WixのC#カスタムアクション

これを行うC#カスタムアクションを作成しました。問題は、アンインストーラがdllを見つけることができないと言って終了することです。

MSIのエラーログに次のエラーが含まれています

Error 1723. There is a problem with this Windows Installer package. A DLL required for this install to complete could not be run. Contact your support personnel or package vendor. Action ReadLicenseKeyFromFile, entry: ReadLicenseKey, library: C:\Windows\Installer\MSI4F42.tmp

私はReadLicenseKeyは、カスタムアクションとしてマークされた機能を持っています。カスタムアクションの名前はReadLicenseKeyFromFileです。

<Custom Action="ReadLicenseKeyFromFile" After="InstallInitialize"> 
    REMOVE~="ALL" AND NOT UPGRADINGPRODUCTCODE 
</Custom> 

<CustomAction Id="ReadLicenseKeyFromFile" BinaryKey="UnInstallCA.CA.dll" DllEntry="ReadLicenseKey" Execute="immediate" Return="check" /> 

<Binary Id="UnInstallCA.CA.dll" SourceFile="$(var.UnInstallCA.TargetDir)UnInstallCA.CA.dll" /> 

カスタムアクションプロジェクトで.CA.dllファイルが出力されています。私はセットアップの一部としてファイルをインストールしようとしましたが、手作業でファイルを貼り付け、ファイルに何もしませんでした。基本的にすべての組み合わせを試しました。

私が紛失しているものがなければならないので、助けてください。

答えて

11

これ以上誰もが時間を無駄にした。

解決策はあまりにも単純すぎました。私はこの特定のメソッドに[CustomAction]属性を配置するのを忘れていました。だから、私がCustomAction.csファイルに書いた最後のアクションだったとしても、それはInstallExecuteSequenceで呼び出される最初のアクションでした。そのために、私はファイルを見つけることができないと思っていると誤解されました。まあ、それは私が本当に眠っていなければならないという事実と同様に...

とにかく、答えを探している間、私は素敵なリソース、特にAlex Shevchuks series on Wixをたくさん見つけました。私が実現したもう一つの事は、カスタムアクションdllファイルをインストールする必要がないということでした。私はちょうど私のWixプロジェクトからそれを参照し、そのパスを提供します。 dllはセットアップに組み込まれ、アンインストールカスタムアクションが呼び出されるときにそこからストリーミングされます。

+1

私が使用したのと同じ問題が発生したときは、DLLを見て、本当に正しいシンボルがエクスポートされているかどうかを確認する必要があります。 /L – leiflundgren

+0

回答を投稿していただきありがとうございます。私はちょうどそのような不可解なエラーメッセージを認識せずに同じ(単純な)間違いをしました! – si618

0

UnInstallCA.CA.dllはインストール中にターゲットマシンにコピーされますか?それはアンインストール時にそこにないようです。

それがある場合 - それは実行できますか? (ターゲットマシンから実行して、実行することができるかどうかを確認してください - おそらく、あなたが使用している他のDLLを出荷する必要がありますか、または再配布可能なパッケージを用意してください)

+0

はい、インストールDLLはインストール時にコピーされます。 いいえ、私はどのようにDLLの使用をシミュレートするのか分かりません。 dllを参照する新しいプロジェクトを作成してから関数を呼び出すことを意味するなら、それは起こります。 –

+0

@Anton Tykhyy - 1時間前に私の質問への回答を投稿したことが通知されましたが、私はその回答を見ることができません。私のプロフィールから、私は答えの一部しか見ることができませんでした。 カスタムアクションプロジェクトは、管理対象DLLをアンマネージの.CA.dllに変換するDTFから必要なユーティリティを実行しています。この.CA.dllは私のセットアップと一緒にインストールしているものです。とにかく、私はどのパスがdllを見つけるために見ているセットアップであるかを確認できますか? –

+0

1つの問題が可変パスである可能性があります。私はそれのように使用したことはありません:) - 物事が動作するかどうかを確認するために実際のパスをハードコードします。 –

関連する問題