我在CurStepChanged(ssPostInstall)PascalScripting事件处理程序中的InnoSetup脚本中执行了很多自定义操作.由于这些操作需要一些时间才能完成,我想更新InnoSetup Wizard GUI状态文本并告诉用户幕后发生了什么.使用"StatusMsg"参数在[Run]部分中可能出现的类似情况.我知道我可以使用TOutputProgressWizardPage/CreateOutputProgressPage(),我在之前的项目中做过,但这对我来说有点太过分了......
是否更容易从PascalScripting代码更新InnoSetup Wizard GUI状态文本,其效果与StatusMsg参数相同?
我有一个包含这两个表的数据库:Customer
和CustomerStatus
.CustomerStatus
是一个所谓的只读表.对客户状态的所有更改都会导致INSERT进入该表.当前客户状态可通过以下位置找到CustomerStatus.StatusTimestamp
.
现在我正在寻找一个LINQ to实体查询,它将所有Customers加载到它们的当前状态.就像是
.Include("CustomerStatus.OrderByDescending(StatusTimestamp).FirstOrDefault()")
.
我没有找到适合EF 4.0的方法.
我目前的解决方法非常难看并使用两个步骤:
步骤1:加载所有状态的LINQ查询(在业务/数据层中):
var r = from c in db.Customers.Include("CustomerStatus")
select c;
步骤2:从GUI中的每个客户获取合适的状态(在MVC3视图的循环中):
c.CustomerStatus.OrderByDescending(i => i.StatusTimestamp).FirstOrDefault()
知道如何直接一步完成这项工作吗?
我正在使用InnoSetup来创建我的应用程序安装程序,并设置"SetupLogging = yes"标志以始终在%TEMP%目录中创建一个setup-log文件.这适用于安装过程.不幸的是,InnoSetup在卸载应用程序时不会创建这样的日志文件.
是否有标志/可能强制InnoSetup也创建卸载日志文件?
在安装过程中,可以使用以下代码(如何从PascalScript代码更新InnoSetup向导GUI状态文本)从PascalScript事件处理程序"CurStepChanged(ssPostInstall)" 内更新InnoSetup向导状态文本:
WizardForm.StatusLabel.Caption := 'status update';
Run Code Online (Sandbox Code Playgroud)
这不适用于卸载.从"CurUninstallStepChanged(usUninstall)"内部访问此属性失败,并显示以下错误:
"Runtime Error: Line 526: Exception: Internal Error: An attempt was made to access WizardForm before it has been created."
Run Code Online (Sandbox Code Playgroud)
知道如何在卸载期间更改InnoSetup向导状态文本吗?也许"usUninstall"太早了?但是标签已经存在并且在卸载程序的GUI中可见...