質問
アプリケーションがアンインストールされると、クライアントに割り当てられたライセンスキーを解放できるように、サーバーに通知する必要があります。これは、Webサービス呼び出しを介して行われます。
これを行うC#カスタムアクションを作成しました。問題は、アンインストーラーがdllを見つけることができなかったと言って辞めていることです。
msiのエラーログには次のエラーが含まれています。
エラー1723。に問題があります このWindowsインストーラパッケージ。 DLL このインストールを完了するために必要 実行できませんでした。サポートに連絡する 担当者またはパッケージベンダー。アクション ReadLicenseKeyFromFile、エントリ: ReadLicenseKey、ライブラリ: 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ファイルを出力しています。セットアップの一部としてファイルをインストールしようとしましたが、ファイルを手動でコピーして貼り付け、ファイルには何もしませんでした...基本的にすべての可能な組み合わせを試しました。
不足しているものがあるはずなので、助けてください。
解決
この件で皆さんの時間を無駄にしてしまったことを申し訳ありません。
解決策はかなり単純なものでした。この特定のメソッドに[CustomAction]属性を配置するのを忘れていました。したがって、CustomAction.csファイルに記述した最後のアクションでしたが、InstallExecuteSequenceで呼び出される最初のアクションでした。そのため、ファイルを見つけることができないと思い込んでしまいました。まあ、それだけでなく、私は本当に眠いに違いないという事実...
とにかく、答えを探しているうちに、たくさんの素敵なリソース、特に Alex ShevchuksシリーズのWix 。もう1つ気づいたのは、カスタムアクションdllファイルをインストールする必要がないことです。 Wixプロジェクトから参照し、そのパスを提供するだけです。 DLLはセットアップに埋め込まれ、アンインストールのカスタムアクションが呼び出されるときにそこからストリーミングされます。
他のヒント
UnInstallCA.CA.dllはインストール中にターゲットマシンにコピーされますか?アンインストール時に存在しないようです。
そこに到達した場合-実行できますか? (ターゲットマシンから実行して、目的の動作を実行できるかどうかを確認します-使用している他のdllをこのマシンから出荷する必要があるか、再配布可能なパッケージである可能性があります)