我看InstalViewModel里面的程序码时,其实有一些摸不着头绪的地方,
排除MVVM风格跟我在写MVC不同外,
主要是有很大的疑问是说BootstrapperApplication的执行顺序是什麽?!
尤其InstallViewModel这边加了很多个事件都跟执行顺序有关联,
我把他所有的事件整理放在一起了後,
最後当我注意到里面的程序码顺序时
竟然不是很有洁癖的A~Z排序,而是感觉他是一段流程的排序,
所以我开始按照InstalViewModel里面的事件顺序排排看!!! 哈哈
//25 当引擎开始计划安装时触发
model.BootstrapperApplication.PlanBegin += PlanBegin;
//26 当检测阶段完成时触发。
model.BootstrapperApplication.DetectComplete += DetectComplete;
//27 当对特定包的检测完成时触发。
model.BootstrapperApplication.DetectPackageComplete += DetectPackageComplete;
//30 当引擎完成特定包的安装规划时触发
model.BootstrapperApplication.PlanPackageComplete += PlanPackageComplete;
//43 当引擎完成安装规划时触发。
model.BootstrapperApplication.PlanComplete += PlanComplete;
//44 当引擎开始安装包时触发。
model.BootstrapperApplication.ApplyBegin += ApplyBegin;
//46 当引擎完成安装特定包时触发。
model.BootstrapperApplication.ExecutePackageComplete += ExecutePackageComplete;
//48 当 Windows Installer 发送安装消息时触发
model.BootstrapperApplication.ExecuteMsiMessage += ExecuteMsiMessage;
//49 当引擎更改捆绑安装的进度时触发。
model.BootstrapperApplication.Progress += ApplyProgress;
//52 当引擎开始安装特定包时触发。
model.BootstrapperApplication.ExecutePackageBegin += ExecutePackageBegin;
//54 在引擎缓存安装源後触发
model.BootstrapperApplication.CacheComplete += CacheComplete;
//60 当引擎有进度获取安装源时触发
model.BootstrapperApplication.CacheAcquireProgress += CacheAcquireProgress;
//73 在有效载荷上执行时由引擎触发。
model.BootstrapperApplication.ExecuteProgress += ApplyExecuteProgress;
//74 当引擎完成安装包时触发。
model.BootstrapperApplication.ApplyComplete += ApplyComplete;
看起来好像是生命周期,
後来查到别人的解释
https://stackoverflow.com/questions/21018262/wix-bootstrapper-sequence-of-bootstrapper-events
检查(Detect) > 计画(Plan)> 执行(Apply)
主要会分三阶段,而每阶段都是非同步的在执行,
所以实际上系统的执行顺序应该为
//26 当检测阶段完成时触发。
model.BootstrapperApplication.DetectComplete += DetectComplete;
//27 当对特定包的检测完成时触发。
model.BootstrapperApplication.DetectPackageComplete += DetectPackageComplete;
//25 当引擎开始计划安装时触发
model.BootstrapperApplication.PlanBegin += PlanBegin;
//30 当引擎完成特定包的安装规划时触发
model.BootstrapperApplication.PlanPackageComplete += PlanPackageComplete;
//43 当引擎完成安装规划时触发。
model.BootstrapperApplication.PlanComplete += PlanComplete;
//44 当引擎开始安装包时触发。
model.BootstrapperApplication.ApplyBegin += ApplyBegin;
//46 当引擎完成安装特定包时触发。
model.BootstrapperApplication.ExecutePackageComplete += ExecutePackageComplete;
//48 当 Windows Installer 发送安装消息时触发
model.BootstrapperApplication.ExecuteMsiMessage += ExecuteMsiMessage;
//49 当引擎更改捆绑安装的进度时触发。
model.BootstrapperApplication.Progress += ApplyProgress;
//52 当引擎开始安装特定包时触发。
model.BootstrapperApplication.ExecutePackageBegin += ExecutePackageBegin;
//54 在引擎缓存安装源後触发
model.BootstrapperApplication.CacheComplete += CacheComplete;
//60 当引擎有进度获取安装源时触发
model.BootstrapperApplication.CacheAcquireProgress += CacheAcquireProgress;
//73 在有效载荷上执行时由引擎触发。
model.BootstrapperApplication.ExecuteProgress += ApplyExecuteProgress;
//74 当引擎完成安装包时触发。
model.BootstrapperApplication.ApplyComplete += ApplyComplete;
恩…
这样程序码上面的流程也合理了
由 27 DetectPackageComplete() 判断安装状态,
会影响 25 PlanBegin() 依照安装状态给 progressPhases 1或2
那实际系统在启动时
CustomBootstrapperApplication> Run > this.Engine.Detect();
这个Detect()就会去执行Detect判断安装状态了,只是会非同步的回来。
一开始假设得很开心,
只是程序码流程就不对了,
後来终於有查到解释...
不然就让你们看我瞎掰了,哈哈!
Day26程序码
https://github.com/Aslan7826/defaultMVC/commits/Day26
<<: [Day 11] 建立 Baseline — 开启机器学习专案的第一步
由於大学跟研究所读的是电机工程,所以对於软件业来说我是个半路出家的人,所以在公司与同事交流或是合作的...
今晚参与了"MakerPro社群媒体平台"举办的 在MCU 上全面建构AI能力 ...
generate: import qrcode import argparse def make_q...
前言 透过系列文章的铺陈,我们可以再跨一步来思考远距工作了,作为一种团队协作思维的转变,为生活与工作...
说起群众募资,有时是开始新产品、新服务或各种古怪的新奇事物。但也有典型的例如线上课程、解决某一件社...