熱點推薦:
您现在的位置: 電腦知識網 >> 編程 >> Delphi編程 >> 正文

Delphi開發Windows服務程序

2022-06-13   來源: Delphi編程 

  開發步驟:

  New>Other>Service Application

  現在一個服務程序的框架已經搭起來了打開Service窗口有幾個屬性說明一下

  AllowPause:是否允許暫停

  AllowStop: 是否允許停止

  Dependencies: 設置服務的依存關系服務的啟動是否依賴於某個服務或者組

  DisplayName: 在服務窗口顯示的名稱

  Interactive: 設置為true時可以和Windows桌面進行交互如果我們想在服務裡顯示窗體的話此設置就要設置為true另外ServiceType必須為stWin

  Password: 密碼

  StartType: 啟動方式

  如果我們想讓服務與窗體交互步驟如下

  在工程中新建一個窗體fmMain

  然後在Service的OnStart中寫代碼

  procedure TServiceServiceStart(Sender: TService; var Started: Boolean);

  begin

  Started := True;

  SvcmgrApplicationCreateForm(TFmMain fmMain);

  FmMainshow;

  end;

  OnStop的代碼

  procedure TServiceServiceStop(Sender: TService; var Stopped: Boolean);

  begin

  Stopped := True;

  FmMainFree;

  end;

  這樣在服務啟動的時候就會顯示出新建的那個窗體

  編譯完成後我們可以安裝服務了安裝方法為

  在cmd窗口中執行 appname /install

  如F:\Book\DService\Projectexe /install

  這樣服務就安裝完成了

  同樣刪除時也是在cmd窗口輸入命令 appname /uninstall

  如F:\Book\DService\Projectexe /uninstall

  關於其他

  關於服務程序的調試

  如果我們開發的服務有多個窗體程序的調試無疑是個大問題

  其實服務程序稍微一改就能改成一個標准的Win工程為了防止不停的變來變去我們可以加上一個編譯條件通過編譯條件來切換生成服務程序還是普通可執行程序假設編譯條件為 NormalApp在以下幾個地方需要加入編譯條件

  工程文件中單元的引用

  {$IFDEF NormalApp}

  Forms

  {$ELSE}

  SvcMgr

  {$ENDIF}

  工程初始化

  {$IFDEF NormalApp}

  ApplicationInitialize;

  ApplicationCreateForm(TFmMain FmMain);

  ApplicationRun;

  {$ELSE}

  if not ApplicationDelayInitialize or ApplicationInstalling then

  ApplicationInitialize;

  ApplicationCreateForm(TService Service);

  ApplicationRun;

  {$ENDIF}

  這樣我們就可以通過增加/刪除NormalApp的編譯條件來切換服務程序和普通窗口程序了


From:http://tw.wingwit.com/Article/program/Delphi/201311/8439.html
    推薦文章
    Copyright © 2005-2022 電腦知識網 Computer Knowledge   All rights reserved.