VS2008のセットアッププロジェクトを使ってインストーラを作成していますが、このセットアッププロジェクトでは、カスタム動作を使用しています。意図したインストールがなされません。そこで、Orcaを使ってmsiの内容を直接変更しようと思い、[RadioButton]テーブルのMaintenanceForm_Actionプロパティに関する修復用ラジオボタンアイテムの行を削除してみましたが、こうすると、インストーラのメンテナンス画面が表示される時に「このパッケージをインストールするときに予期しないエラーが検出されました。このパッケージは問題がある可能性があります。エラーコードは2855です。」というメッセージが表示され、インストーラーがうまく動作してくれません。修復ラジオボタンを非表示または無効にすることはできるのでしょうか?よろしくお願いします。このセットアッププロジェクトでは、カスタム動作を使用しています。意図したインストールがなされません。>修復へのルートを見た目見せないことは可能ですが、自動修復が働いた場合に同じ状況になるのでカスタム動作をメンテナンス画面でも動くように修正したほうがよいと思います。普通に組み込んでいれば、カスタム動作はスキップしないはずなんですがね。「このパッケージをインストールするときに予期しないエラーが検出されました。このパッケージは問題がある可能性があります。エラーコードは2855です。いうメッセージが表示され、インストーラーがうまく動作してくれません。修復ラジオボタンを非表示または無効にすることはできるのでしょうか?>出来ないわけではありませんが、確かラジオは2個以上ないとだめだったはずなのでラジオを出さない形にページを「作り変える」必要があると思います。チェック済みだと思いますが、ラジオコントロールのリファレンスも張っておきますね。https://msdn.microsoft.com/en-us/library/aa370958.aspxただ、そこまでカスタマイズするとなると、ORCAでちょこちょこっと修正してというレベルでは無くなってくるので、ビルドツールそのものも考えたほうがいいのでは?となってくると思います。11:04:45)コッテです。とっちゃん様、アドバイスありがとうございました。自動修復については全く頭にありませんでした。ググると、msiファイルの右クリックでの「修復」なんてのもあり、これもノーチェックでした...今回の「修復」で何が問題なのかを確認しました。初回インストール時にはユーザー情報画面でシリアルナンバーを入力できるようにしていますが、さらにこの画面をカスタマイズし、追加情報を入力できるようにしています。(msiのカスタマイズにはOrcaを使用しています。修復時にはこれらが登録されない(書き込まれた情報が消去されてしまう?)状態となってしまいます。初回インストール時に設定したレジストリも書き替わってしまいます。13:02:12)コッテです。・ユーザー情報に入力がある場合にはその内容をレジストリに書き込む・ユーザー情報がなければ該当項目をレジストリより削除するということをやっていました。自動修復については全く頭にありませんでした。これもノーチェックでした...>他にも、追加と削除の画面にも修復ボタンってあります。こちらはmsi的には設定すれば消せますが。今回の「修復」で何が問題なのかを確認しました。この画面をカスタマイズし、追加情報を入力できるようにしています。(msiのカスタマイズにはOrcaを使用しています。)>これ、ビルド時に毎回手動でセットしてるんですか?スクリプトを使って、機械的に処理したほうがいいような。いうスクリプトがあります。こいつを使って手動設定してる内容を記述してやれば、ビルド時に自動処理ができます。修復時にはこれらが登録されない(書き込まれた情報が消去されてしまう?)状態となってしまいます。いうことをやっていました。起動条件(セットアッププロジェクトのコンテキストメニューから出せます)にある対象コンピュータの検索で、ユーザーが入力した情報を再度そのまま取り込めるようにしておく方法がお勧めです。値が入っていれば、その値をプロパティに設定してくれます。この仕組みをうまく使って、修復時にあってほしいはずの既存情報を吸い上げてくるということを行います。プロパティで判断することもできます。インストール済みなら、カスタム動作の処理をスキップするとかもありだと思います。これはやはりハードルが高いでしょうか?>強制的にキャンセルは、エラーカスタムアクション(https://msdn.microsoft.com/en-us/library/aa368078.aspx)を設定してそれを適切な状況で呼び出すことで処理できます。チェックが不十分だと、アンインストールでもエラーメッセージを出すので、シャレにならんことになります。チェックができていれば、修復だけブロックすることは可能です。修復時にUIを出せるかどうかとなると話が変わります。右クリックで出てきた修復や、追加と削除にある修復は、UIが出ませんし、出せません。(BasicUIモードというWindowsInstallerエンジンが提供するUIを使うため)なので、この場合はユーザー情報画面を出せるようにしてあっても出てくることはありません。初回インストール時に設定したレジストリも書き替わってしまいます。使って操作する場合は、インストール時に許可しているので、出ません。Win7だったか、Win8からだったはず。内部にも署名情報が埋め込まれている場合は出なくなるだったはず。10:43:19)コッテです。とっちゃん様、いつもありがとうございます。しておく方法がお勧めです。貴重な情報、誠にありがとうございました。スクリプトを使って、機械的に処理したほうがいいような。いうスクリプトがあります。こいつを使って手動設定してる内容を記述してやれば、ビルド時に自動処理ができます。実際には、差替または追加用のテーブルデータを予め用意し(内容は固定)、これらをOrcaでインポートするだけの作業なので、スクリプトを用意するまでには至っていない、というのが現状です。何だか光が見えてきました。結果が出ましたら、またご報告します。12:26:53)度々失礼します。プロパティで判断することもできます。インストール済みなら、カスタム動作の処理をスキップするとかもありだと思います。このInstalledプロパティは、何のプロパティでしょうか?もしこれが使えるようであれば、インストール済みかどうかの判断にしようと思います。別の方法を考えないといけない、ということですよね。プロパティで判断することもできます。>>インストール済みなら、カスタム動作の処理をスキップするとかもありだと思います。このInstalledプロパティは、何のプロパティでしょうか?起動したmsiのProductCodeの製品は、すでにインストールされているか?を判定するプロパティです。https://msdn.microsoft.com/en-us/library/aa369297.aspxユーザーが設定を変えられるものではなく、システムが自動的にセットします。未定義となります(存在しないプロパティ)。これが使えるようであれば、インストール済みかどうかの判断にしようと思います。別の方法を考えないといけない、ということですよね。自分の目で確認したい場合は、ログを取得してその内容をチェックしてください。<logファイルのパス>として、実行することで簡単に取得できます。検索してみると結果がわかります。実際にインストールしたらどうなるか?という点では、サンプル用に適当なインストーラを作成しビルドして1.インストールしていない時2.インストール後にもう一度実行した時3.バージョンを上げてビルドして、実行した時の3種類のログをとってみるとよいと思います。他にもチェックに使えるプロパティがいろいろあるので、条件判定などで、参考にできると思います。Table(Sequenceでソートするとわかりやすい)と突き合わせてみるとインストーラの動きがわかると思います。13:31:43)コッテです。とっちゃん様、ご丁寧にお付き合い頂き、ありがとうございます。教えて頂いた情報を元に、色々と確認してみます。結果が出ましたら、またご報告します。何かありましたら質問させてください。17:05:45)コッテです。あれから色々と検討しましたが、よく考えたら、現在はカスタム動作のコミット時に入力情報をもとに生成したコードをレジストリに書き込み、カスタム動作のアンインストール時にはこれを削除するということを行っていたので、このタイミングでバージョン情報(を含むデータ)をレジストリに登録・削除することにしました。・初回インストール...レジストリにバージョン情報がない、またはインストーラーのバージョンがレジストリ登録バージョンより新しい・修復...インストーラーのバージョンとレジストリ登録バージョンが同一ということで判別できそうです。(インストーラーのバージョンがレジストリ登録バージョンより古い場合は、インストーラーでエラーメッセージが出るので、ここでは考慮しません。引き続きアドバイスを頂けるとありがたいです。