能不能让一个程序既可以以普通方式执行又可以以服务方式执行?最好给代码,谢谢。

解决方案 »

  1.   

    2个project(服务和普通应用)共享一套业务代码
      

  2.   

    C:\Program Files\Borland\Delphi7\Source\Vcl\ScktSrvr.dpr
    打开这个看看
      

  3.   

    以下代码可以实现既可以服务运行,也可以桌面运行,而且可以限定服务和桌面只运行一个。如何限制系统服务和桌面程序只运行一个在工程加入下列代码可以设置系统服务和桌面程序只运行一个。
    program FleetReportSvr;uses
    SvcMgr,
    Forms,
    SysUtils,
    Windows,
    SvrMain in 'SvrMain.pas' {FleetReportService: TService},
    AppMain in 'AppMain.pas' {FmFleetReport};{$R *.RES}const
    CSMutexName = 'Global\Services_Application_Mutex';
    var
    OneInstanceMutex: THandle;
    SecMem: SECURITY_ATTRIBUTES;
    aSD: SECURITY_DESCRIPTOR;
    begin
    InitializeSecurityDescriptor(@aSD, SECURITY_DESCRIPTOR_REVISION);
    SetSecurityDescriptorDacl(@aSD, True, nil, False);
    SecMem.nLength := SizeOf(SECURITY_ATTRIBUTES);
    SecMem.lpSecurityDescriptor := @aSD;
    SecMem.bInheritHandle := False;
    OneInstanceMutex := CreateMutex(@SecMem, False, CSMutexName);
    if (GetLastError = ERROR_ALREADY_EXISTS)then
    begin
        DlgError('Error, Program or service already running!');
        Exit;
    end;
    if FindCmdLineSwitch('svc', True) or
        FindCmdLineSwitch('install', True) or
        FindCmdLineSwitch('uninstall', True) then
    begin
        SvcMgr.Application.Initialize;
        SvcMgr.Application.CreateForm(TSvSvrMain, SvSvrMain);
        SvcMgr.Application.Run;
    end
    else
    begin
        Forms.Application.Initialize;
        Forms.Application.CreateForm(TFmFmMain, FmMain);
        Forms.Application.Run;
    end;
    end.
      

  4.   

    原文章地址;http://hi.baidu.com/sqldebug/blog/item/58a764624a44d74eeaf8f863.html