小编LeR*_*kie的帖子

在Wix 3.8中检测MajorUpgrade

我正在安装软件的所有新版本作为主要升级,因为安装非常小,而且大多数情况下,所有文件都会更改。

如果完成了与全新安装相比的升级,我想跳过安装程序中的一个对话框,但是到目前为止,在以下示例中,我仍无法弄清要使用什么条件(例如“ Installed AND PATCH”)。

     <Publish Dialog="VerifyReadyDlg" Control="Back" Event="NewDialog" 
              Value="WelcomeDlg" Order="2">Installed AND PATCH</Publish>
Run Code Online (Sandbox Code Playgroud)

windows-installer wix wix3 major-upgrade

3
推荐指数
1
解决办法
2415
查看次数

Windows服务中的计时器队列

对于Windows服务,我需要一个计时器来定期执行某项任务.当然,有许多选项似乎优于计时器(多线程,直接从服务的主线程调用方法),但它们在这种特定情况下都有它们的缺点.

但是,由于显而易见的原因,如果没有GUI的消息队列,SetTimer()将无法工作.我所做的(在Free Pascal中)是以下内容:

创建计时器:

MyTimerID := SetTimer(0, 0, 3333, @MyTimerProc);
Run Code Online (Sandbox Code Playgroud)

在服务的主循环中,运行计时器队列:

procedure TMyServiceThread.Execute;
var
  AMessage: TMsg;
begin
  repeat
    // Some calls
    if PeekMessage(AMessage, -1, WM_TIMER, WM_TIMER, PM_REMOVE) then begin
      TranslateMessage(AMessage);
      DispatchMessage(AMessage);
    end;
    // Some more calls
    TerminateEventObject.WaitFor(1000);
  until Terminated;
end;
Run Code Online (Sandbox Code Playgroud)

最后,杀掉计时器:

KillTimer(0, MyTimerID)
Run Code Online (Sandbox Code Playgroud)

除了KillTimer总是返回False,这按预期工作.

我对你的反馈很感兴趣,但是,如果我的实现是正确的 - 我只是想避免弄乱其他应用程序的消息以及我不知道的其他副作用,因为我对消息处理经验不足.

谢谢!

delphi winapi freepascal timer message-queue

3
推荐指数
1
解决办法
1227
查看次数