Первое, что бросается в глаза из вашего кода Wix, это то, что вы отправляете все исполняемые файлы внутри одного компонента, но для этого компонента нет KeyPath. Это очень плохая идея! Это определенно приведет ко многим проблемам с обслуживанием, таким как проблема, с которой ваш watchdog.exe не обновляется.
Установщик Windows считает компонент самой маленькой установочной единицей. Кроме того, установщик Windows будет смотреть на KeyPath только для того, чтобы решить, существует ли компонент (или его необходимо обновить и т. Д.) Поскольку у «MyAppComponent» нет пути к ключу, WI по умолчанию будет использовать Directory в качестве вашего пути к ключу. Это означает, что во время обновления, если WI обнаружит ваш каталог, он будет предполагать, что компонент уже установлен, и не будет обновлять какие-либо файлы в компоненте.
Практическое правило, которое следует соблюдать, заключается в том, что любой файл .exe или .dll должен быть единственным файлом в компоненте, а также должен являться траекторией ключей для вашего компонента. Я зашел так далеко, что создал компонент для каждого отдельного файла в моих установках, что позволит избежать многих головных болей в будущем. Попробуйте заменить MyAppComponent следующими компонентами:
<Directory Id="ApplicationRootFolder" Name="$(var.ProductName)">
<Component Id="MyApp.exe" Guid="INSERT_GUID_HERE">
<File Id="MyApp.exe" Name="MyApp.exe" Source="..\Release\MyApp.exe" KeyPath="yes"/>
</Component>
<Component Id="FirstRunApp.exe" Guid="INSERT_GUID_HERE">
<File Id="FirstRunApp.exe" Name="FirstRunApp.exe" Source="..\Release\FirstRunApp.exe" KeyPath="yes"/>
</Component>
<Component Id="MyAppWatchDog.exe" Guid="INSERT_GUID_HERE">
<File Id="MyAppWatchDog.exe" Name="MyAppWatchDog.exe" Source="..\Release\MyAppWatchDog.exe" KeyPath="yes"/>
</Component>
<Component Id="CheckSniffer.exe" Guid="INSERT_GUID_HERE">
<File Id="CheckSniffer.exe" Name="CheckSniffer.exe" Source="..\Release\CheckSniffer.exe" KeyPath="yes"/>
</Component>
<Component Id="License.rtf" Guid="INSERT_GUID_HERE">
<File Id="License.rtf" Name="License.rtf" Source="License.rtf" KeyPath="yes"/>
</Component>
</Directory>
Это должно решить ваши проблемы с обновлением. Возможно, вы также захотите разделить ваши ярлыки компонентов на один ярлык для каждого компонента и установить значение HKCU в качестве пути к ключу для каждого компонента.