包含Console App Stdout Stream的Delphi Windows服务

时间:2012-11-28 21:46:06

标签: delphi windows-services console stdout

我以前为Delphi使用该框架编写了许多服务。我现在想用一些类似控制台的功能来扩展服务。

我能提供的最简单的例子是,我想从命令提示符中运行服务可执行文件,如下所示。

> myservice.exe /version

MyService Version 1.0

在项目文件中,我将处理参数并在服务初始化之前退出并完成。

If ParamStr(1) = '/version' then
begin
   writeln ('MyService Version 1.0');
   exit;
end;

// Other standard service launch code is after this for proper initialization
// when run as a service, i.e.
if not Application.DelayInitialize or Application Installing then 
...

但是要使writeln语句起作用,通常我需要项目文件中的指令{$APPTYPE CONSOLE},然后它会破坏服务应用程序Destroy事件。

是否有其他方法可以将标准输出连接到控制台而不使用Delphi Windows Service App的{$APPTYPE CONSOLE}指令?

1 个答案:

答案 0 :(得分:1)

新的自己的控制台

begin

  if paramstr(1)='/?' then
    begin
      if Windows.AllocConsole then
      try
        WriteLn;
        // irgendeine sinnvolle Information, z.B.:
        WriteLn('Your Info');
        readln;
      finally
        FreeConsole;
      end;
    end

  else
     begin
     //Your Appcode

或附加到控制台,无需创建自己的控制台

begin

  if paramstr(1) = '/?' then
  begin

    if AttachConsole($FFFFFFFF) then
    begin
      WriteLn('Your Info');
      Readln;
      FreeConsole; 
    end;
  end

  else
  begin
  // Your Appcode