mmx のアドバイスに従って、イベント ログを調べたところ、MSI が不平を言っている理由についての手がかりが得られました。私の場合は次のとおりでした。
製品 '{5BF6F4BA-4266-42E8-A376-EB341856049F}'、機能 'DefaultFeature'、コンポーネント '{5BF6F4BA-4266-42E8-A376-EB341856049F}' の検出に失敗しました。リソース 'C:\Program Files (x86)\My Company\My App\' は存在しません。
アプリをその特定のフォルダーに入れていなかったので、意味がありませんでした。次のように、アプリフォルダーを別のフォルダーに入れていました。
「C:\Program Files (x86)\My Company\Some Other Folder\My App\」
MSIファイルを少し検索した後、ようやく犯人を見つけました。「アプリケーション フォルダー」を見ると (Visual Studio で Setup MSI プロジェクトを右クリックし、[表示] -> [ファイル システム] をクリックします)。その DefaultLocation プロパティが次のように設定されていることがわかります。
[ProgramFilesFolder][メーカー]\[製品名]
私の場合の修正は、単に次のものに置き換えることでした:
[ProgramFilesFolder][Manufacturer]\Some Other Folder\My App
それを行った後、MSI は起動時に修復をトリガーしなくなりました。