Ну, файлы журнала ничего не говорят, и я установил INSTALLLEVEL перед InstallValidate (я установил его в пользовательском интерфейсе перед установкой).Что касается накладных расходов, все это происходит быстро на этой медленной машине, но опять же это пользовательское действие, которое я использую в пользовательском интерфейсе при следующем нажатии кнопки.Но я выяснил, в чем проблема и как ее обойти.
Применительно к этой ссылке слишком поздно менять INSTALLLEVEL из пользовательского интерфейса, потому что INSTALLLEVEL принимается заучетной записи в соответствии со стандартным действием CostFinalize, и стандартное действие CostFinalize будет выполнено до того, как у меня будет время, чтобы позволить пользователю выбрать его функции и вызвать мое действие.Космин, я не думаю, что INSTALLLEVEL имеет значение до InstallValidate, кажется, что это гораздо раньше, в этом случае его до CostFinalize учитывают.
То, что я должен был сделать, было следующим...
Я изменил свою вторую функцию, чтобы она отсутствовала:
<Feature Id='BaseProductFeatures' Title='Feature 1' Level='1'>
<ComponentRef Id='WebAppVDirComponent'/>
<ComponentRef Id='someVDirComponent'/>
<ComponentRef Id='anotherWCFVDirComponent'/>
<ComponentGroupRef Id='group_IMPORTFOLDERFILES'/>
<ComponentGroupRef Id='group_WINSERVERFILES'/>
</Feature>
<Feature Id='SMSGWFeature' Title='Feature 2' Level='2' Absent='allow'>
<ComponentGroupRef Id='group_SMSGWWEBAPPFILES'/>
</Feature>
Я изменил свое пользовательское действие, чтобы включить или отключить функцию:
foreach (FeatureInfo aFeature in session.Features) {
if (session["INSTALLSMSGATEWAYSERVICE"] == "" && aFeature.Name == "SMSGWFeature") {
aFeature.RequestState = Microsoft.Deployment.WindowsInstaller.InstallState.Absent;
}
else if (session["INSTALLSMSGATEWAYSERVICE"] == "1" && aFeature.Name == "SMSGWFeature") {
aFeature.RequestState = Microsoft.Deployment.WindowsInstaller.InstallState.Local;
}
}