我正在 Delphi 中编写更新
为此,我有两种形式 - Main 和 UpdateProgram。使用 Wix 创建的 msi 文件#
主要的:
procedure TfrmMain.FormShow(Sender: TObject);
begin
FUpdateForm := TfrmUpdateProgram.Create(self);
...
end;
更新程序:
procedure TfrmUpdateProgram.tmrCheckUpdateTimer(Sender: TObject);
var
installer : Variant;
database : Variant;
sql : String;
view : Variant;
rec : Variant;
begin
tmrCheckUpdate.Enabled := False;
var MsiFileName := 'testpath/test.msi'; //Test
CoInitialize(nil);
try
installer := CreateOleObject('WindowsInstaller.Installer');
database := installer.OpenDatabase( MsiFileName, 0 );
sql := 'SELECT Value FROM Property WHERE Property = ''ProductVersion''';
view := database.OpenView(sql);
view.Execute();
rec := view.Fetch();
var string_variable := rec.StringData[1];
var a := False; //string_variable = TProgramVersion.GetProgramVersion.ToString;
if (not a) and (GetParentForm(self).Enabled) then
begin
self.ShowModal;
end;
finally
rec := Unassigned;
view:= Unassigned;
database := Unassigned;
installer := Unassigned;
end;
tmrCheckUpdate.Enabled := True;
end;
因此,当发现新的更新时,计时器上会弹出一个窗口
我的问题是,在 Main 中,有时会调用模态窗口,它们有必要的工作,需要完成执行到最后。由于计时器是多线程工作的,因此在使用模式窗口时会出现此更新程序,并且不允许工作完成
有没有办法检测表单是否有模式窗口?(我不想为每次打开模态窗口都编写一个事件,因为要添加的东西太多了)
如果没有,那么除了添加“延迟更新”按钮之外,还有其他选项可以解决这个问题吗?