Programs and Featuresの[修復]ボタンをbasic UI以上にすることはできません。ボタンを隠すためにプロパティーARPNOREPAIR
を1に設定することができます。この場合、ユーザーはプログラムや機能からこのような操作を実行するためにメンテナンス(通常は変更または変更ボタン)を入力する必要があります。ただし、自動修復でも基本的なUIが使用され、ユーザーはコマンドラインからmsiexecへの適切な引数を使用して何かを呼び出すことができます。
後者の問題の大半を回避する方法を文書化することはできますが(値を設定するプロパティを教えてください)、自動修復は抑制するのが難しいです。だから、自動修復を検出して、あなたのアプローチを修正しなければならない(私はREINSTALLMODE
の漠然とした思い出がありますが、他の場所ではめったに提案されていないp
を含む)、またはメンテナンス中にこの値を入力する必要がないという一般的なアプローチを変更してください。
この値が何であるか、それが意図されているかについての詳細がわからないのですが、単純で慣用的なので最後のアプローチを暫定的に提案します。最初のインストール時にこの値をレジストリに受け入れて保存し、メンテナンス操作中にこの値をレジストリから読み込みます。必要に応じて、完全なUIまたはコマンドラインからメンテナンスを実行している場合は、それらを入力(オーバーライド)させます。これが構成プロパティーの場合、これはほぼ確実に正しい動きです。それが「パスワード」のようなものであれば疑問ですが、MSIの内部で実装できるパスワードスキームよりもWindowsの管理アクセス権を信頼する必要があると主張します。
何か他にも、基本的で静かなUIの場合を処理することを忘れないでください。初めてインストールする場合は、値のデフォルトのフォールバックを持つか、明示的にチェックし、冗長なメッセージを記録して、何が起きているのかを判断してインストールを中止するのが最善です。値が実際に必要な場合は、他の呼び出しでも同じアプローチが有効です。プログラムが既にインストールされているときに中止することに注意してください。壊れた自動修理やアンインストールはどちらも酷い経験です。