Clipper On Line • Ver Tópico - Erro testando aplicação serviço com windows 7/64

Erro testando aplicação serviço com windows 7/64

Projeto Harbour - Compilador de código aberto compatível com o Clipper.

Moderador: Moderadores

 

Erro testando aplicação serviço com windows 7/64

Mensagempor asimoes » 11 Jun 2013 10:18

Senhores,

Estou tentando executar o programa abaixo (baseado na contrib hbwin) para criar um serviço windows e acontece um erro que não estou identificando, não sei como fazer debug para este tipo de programa como serviço o erro me parece ser na função directory na função srvmain(), alguém pode dar uma luz?

#include "inkey.ch"
#include "setcurs.ch"
#include "error.ch"
#include "achoice.ch"
#include "fileio.ch"
#include "common.ch"
#include "dbinfo.ch"
#include "hbver.ch"
#include "hbdyn.ch"
#include "wvtwin.ch"
#include "hbgtinfo.ch"
#include "hbgtwvg.ch"
#include "wvgparts.ch"
#include "hbcompat.ch"
#include "windows.ch"
#include "hbhrb.ch"
#include "directry.ch"
#include "hbwin.ch"

#define _SERVICE_NAME "Servidor_de_Impressao_PrintWIN"

PROCEDURE WinMain( cMode )
   LOCAL nError
   LOCAL cMsg

   hb_default( @cMode, "S" ) /* NOTE: Must be the default action */

   SWITCH Upper( cMode )
   CASE "I"

      IF win_serviceInstall( _SERVICE_NAME, "PrintWin" )
         Alert("O serviço foi instalado com sucesso.")
      ELSE
         nError := wapi_GetLastError()
         cMsg := Space( 128 )
         wapi_FormatMessage( ,,,, @cMsg )
         Alert("Error installing service: " + hb_ntos( nError ) + " " + cMsg)
      ENDIf
      EXIT

   CASE "D"

      IF win_serviceDelete( _SERVICE_NAME )
         Alert("O serviço foi deletado.")
      ELSE
         nError := wapi_GetLastError()
         cMsg := Space( 128 )
         wapi_FormatMessage( ,,,, @cMsg )
         Alert("Error deleting service: " + hb_ntos( nError ) + " " + cMsg)
      ENDIf
      EXIT

   CASE "S"

      /* NOTE: Used when starting up as service.
               Do not invoke the executable manually with this option */

      IF win_serviceStart( _SERVICE_NAME, @SrvMain() )
         Alerto("Service has started OK")
      ELSE
         nError := wapi_GetLastError()
         cMsg := Space( 128 )
         wapi_FormatMessage( ,,,, @cMsg )
         Alert("Service has had some problems: " + hb_ntos( nError ) + " " + cMsg)
      ENDIF
      EXIT

   ENDSWITCH

   RETURN

PROCEDURE SrvMain()
LOCAL fhnd := hb_FCreate( hb_dirBase() + "testsvc.out", FC_NORMAL, FO_DENYNONE + FO_WRITE )
LOCAL n := 0
LOCAL cParam
LOCAL cPastaTemp:=Upper(GetEnv("TEMP"))
LOCAL aDir1, aFiles1
LOCAL I

   aDir1:=Directory(cPastaTemp+HB_PS()+"MAC_*.PF")
   
   aFiles1:={}
   
   IF Len(aDir1) > 0
      AEval(aDir1,{|f| AAdd(aFiles1,{Upper(cPastaTemp+HB_PS()+f[F_NAME]), DTOS(f[F_DATE])+" "+f[F_TIME],Upper(f[F_NAME]),f[F_SIZE]})})
      ASort( aFiles1 ,,, {|x,y| y[2] > x[2] } )
   ENDIF
   
   FWrite( fhnd, "Startup" + hb_eol() )
   
   DO WHILE win_serviceGetStatus() == WIN_SERVICE_RUNNING
      FOR I:=1 TO Len(aFiles1)
         FWrite( fhnd, aFiles1[I,1] + hb_eol() )     
      NEXT
      hb_idleSleep( 0.5 )
   ENDDO
   
   FWrite( fhnd, "Exiting..." + hb_eol() )
   FClose( fhnd )
RETURN

INIT FUNCTION AppSetup()
 
  REQUEST HB_LANG_PT
  REQUEST HB_CODEPAGE_PT850
  HB_LANGSELECT("PT")
  HB_CDPSELECT( "PT850" )

  REQUEST DBFCDX
  RddSetDefault("DBFCDX")

  SETMODE(25,80)
  SET CENTURY ON
  SET EXCLUSIVE OFF
  SET EPOCH TO 1920

  CLS
 
  IniciaJanela()

RETURN Nil

FUNCTION IniciaJanela(nLi,nCi,nLf,nCf)

LOCAL oCrt
   HB_Default(@nLi,0)
   HB_Default(@nCi,0)
   HB_Default(@nLf,MaxRow())
   HB_Default(@nCf,MaxCol())
 
  cTituloJanela:="Teste Servico 1.0"

  HB_gtInfo(HB_GTI_FONTNAME, "Lucida Console")
  HB_gtInfo(HB_GTI_ICONRES, "ICON_ASAPREV" ) //CLIENTE.RC
  HB_gtInfo(HB_GTI_WINTITLE, cTituloJanela)
  HB_gtInfo(HB_GTI_CLOSABLE, .F. )
  HB_gtInfo(HB_GTI_CLIPBOARDDATA )
  HB_gtInfo(HB_GTI_SELECTCOPY, .T. )
  HB_gtInfo(HB_GTI_MOUSESTATUS, 1 )
  HB_gtInfo(HB_GTI_ISGRAPHIC, .T. )
  HB_gtInfo(HB_GTI_STDERRCON, .T. )
  HB_gtInfo(HB_GTI_COMPATBUFFER, .T. )
  HB_gtInfo(HB_GTI_SPEC, HB_GTS_WNDSTATE, HB_GTS_WS_MAXIMIZED )
  hwg_doevents()

RETURN Nil

â–ºHarbour 3.x | Minigui xx-x | HwGuiâ—„
Pense nas possibilidades abstraia as dificuldades.
Não corrigir nossas falhas é o mesmo que cometer novos erros.
A imaginação é mais importante que o conhecimento. (Albert Einstein)
Avatar de usuário

asimoes
Colaborador

Colaborador
 
Mensagens: 4919
Data de registro: 26 Abr 2007 16:48
Cidade/Estado: RIO DE JANEIRO-RJ
Curtiu: 341 vezes
Mens.Curtidas: 258 vezes

Erro testando aplicação serviço com windows 7/64

Mensagempor asimoes » 11 Jun 2013 12:40

Fiz um teste com a função directory() antes de instalar o serviço, até ai funciona, depois no loop srvmain para de funcionar. Os parâmetros passados são os mesmos.

cPastaTemp:=Upper(GetEnv("TEMP"))
aDir1:=Directory(cPastaTemp+HB_PS()+"MAC_*.PF")

Muito estranho! :(Neg
â–ºHarbour 3.x | Minigui xx-x | HwGuiâ—„
Pense nas possibilidades abstraia as dificuldades.
Não corrigir nossas falhas é o mesmo que cometer novos erros.
A imaginação é mais importante que o conhecimento. (Albert Einstein)
Avatar de usuário

asimoes
Colaborador

Colaborador
 
Mensagens: 4919
Data de registro: 26 Abr 2007 16:48
Cidade/Estado: RIO DE JANEIRO-RJ
Curtiu: 341 vezes
Mens.Curtidas: 258 vezes

Erro testando aplicação serviço com windows 7/64

Mensagempor alxsts » 11 Jun 2013 16:31

Olá!

Você tem a variável de ambiente "TEMP"? Esta linha no meu PC retorna vazio:
LOCAL cPastaTemp:=Upper(GetEnv("TEMP"))
[]´s
Alexandre Santos (AlxSts)
alxsts
Colaborador

Colaborador
 
Mensagens: 2945
Data de registro: 12 Ago 2008 15:50
Cidade/Estado: São Paulo-SP-Brasil
Curtiu: 21 vezes
Mens.Curtidas: 248 vezes

Erro testando aplicação serviço com windows 7/64

Mensagempor asimoes » 11 Jun 2013 18:50

Alexandre,

Abandondei o getenv e agora estou usando uma pasta especial fixa para tratar os arquivos de impressão, o meu problema e desafio agora é fazer a impressão funcionar.
Na rotina "Impressao()" no trecho "IF Len(aFiles1) > 0 ... FOR A:=1 TO Len(aFiles1)" funciona, a leitura do arquivo está ok mas mas não há impressão!!!
Será que é porque está rodando como serviço e os recursos de win_prn() não funcionam?

Uma nova informação: a função WIN_PrinterGetDefault() não está pegando a impressora padrão e é por isso que não está imprimindo, a função pegou outra impressora e
ficou louca rodando dentro do serviço.


#include "inkey.ch"
#include "setcurs.ch"
#include "error.ch"
#include "achoice.ch"
#include "fileio.ch"
#include "common.ch"
#include "dbinfo.ch"
#include "hbver.ch"
#include "hbdyn.ch"
#include "wvtwin.ch"
#include "hbgtinfo.ch"
#include "hbgtwvg.ch"
#include "wvgparts.ch"
#include "hbcompat.ch"
#include "windows.ch"
#include "hbhrb.ch"
#include "directry.ch"
#include "hbwin.ch"

#define _SERVICE_NAME "PrintWIN"

PROCEDURE WinMain( cMode )
   LOCAL nError
   LOCAL cMsg
   //LOCAL fhnd := hb_FCreate( hb_dirBase() + "svcini.out", FC_NORMAL, FO_DENYNONE + FO_WRITE )
   
 
   //cPastaTemp:=Upper(GetEnv("TEMP"))

   //FWrite( fhnd, "Startup " + cPastaTemp + hb_eol() )
   
   //FClose( fhnd )
   
   //aDir1:=Directory(cPastaTemp+HB_PS()+"*.PF")
   
   //aFiles1:={}
   
   //IF Len(aDir1) > 0
   //   AEval(aDir1,{|f| AAdd(aFiles1,{Upper(cPastaTemp+HB_PS()+f[F_NAME]), DTOS(f[F_DATE])+" "+f[F_TIME],Upper(f[F_NAME]),f[F_SIZE]})})
   //   ASort( aFiles1 ,,, {|x,y| y[2] > x[2] } )
   //ENDIF
   
   //IF Len(aDir1) > 0
   //   HWG_MsgInfo("Lista de Diretórios")
   //ENDIF

   hb_default( @cMode, "S" ) /* NOTE: Must be the default action */

   SWITCH Upper( cMode )
   CASE "I"

      IF win_serviceInstall( _SERVICE_NAME, "PrintWin" )
         HWG_MsgInfo("O serviço foi instalado com sucesso.")
      ELSE
         nError := wapi_GetLastError()
         cMsg := Space( 128 )
         wapi_FormatMessage( ,,,, @cMsg )
         HWG_MsgInfo("Error installing service: " + hb_ntos( nError ) + " " + cMsg)
      ENDIf
      EXIT

   CASE "D"

      IF win_serviceDelete( _SERVICE_NAME )
         HWG_MsgInfo("O Serviço foi deletado.")
      ELSE
         nError := wapi_GetLastError()
         cMsg := Space( 128 )
         wapi_FormatMessage( ,,,, @cMsg )
         HWG_MsgInfo("Error deleting service: " + hb_ntos( nError ) + " " + cMsg)
      ENDIf
      EXIT

   CASE "S"

      /* NOTE: Used when starting up as service.
               Do not invoke the executable manually with this option */

      IF win_serviceStart( _SERVICE_NAME, @SrvMain() )
         HWG_MsgInfo("Service has started OK")
      ELSE
         nError := wapi_GetLastError()
         cMsg := Space( 128 )
         wapi_FormatMessage( ,,,, @cMsg )
         HWG_MsgInfo("Service has had some problems: " + hb_ntos( nError ) + " " + cMsg)
      ENDIF
      EXIT

   ENDSWITCH

   RETURN

PROCEDURE SrvMain()

   
   LogSis("Serviço Iniciado em  "+HB_DTOC(Date(),"DD/MM/YY")+" "+Time(),HB_DIRBASE()+"LOGSRV.LOG")

   DO WHILE win_serviceGetStatus() == WIN_SERVICE_RUNNING
      Impressao()
      hb_idleSleep( 5 )
   ENDDO

   LogSis("Serviço terminado em "+HB_DTOC(Date(),"DD/MM/YY")+" "+Time(),HB_DIRBASE()+"LOGSRV.LOG")
   
   win_serviceSetExitCode( 0 )
   win_serviceStop()
   
RETURN

FUNCTION Impressao
LOCAL aDir1, aDir2, aDir3, aDir4, aFiles1, aFiles2, aFiles3, aFiles4, oErro, A
LOCAL nMaxLine, nLin, cLinha, lEject, nTam14, nTam15, nTam16, nTam17, nTam18, nTam20, nChr27, nTamPCL10, nTamPCL18, nTam
LOCAL oPrn, VM_nNormal, cTam, lNegrito, aVetor
LOCAL cPastaTemp:=""

MEMVAR cArqPrint, cPrinter

   cPastaTemp:="D:\TEMPIMP"
   
   IF !IsDirectory( cPastaTemp )
      DirMake(cPastaTemp)
   ENDIF
   
   TRY

      aDir1:=Directory(cPastaTemp+HB_PS()+"TXT_*.PF")

      aDir2:=Directory(cPastaTemp+HB_PS()+"PCL_*.PF")

      aDir3:=Directory(cPastaTemp+HB_PS()+"MAC_*.PF")
     
      aDir4:=Directory(cPastaTemp+HB_PS()+"USU_*.PF")

      ASort( aDir1 ,,, {|x,y| DTOS(y[3])+y[4] > DTOS(x[3])+x[4] } )

      ASort( aDir2 ,,, {|x,y| DTOS(y[3])+y[4] > DTOS(x[3])+x[4] } )

      ASort( aDir3 ,,, {|x,y| DTOS(y[3])+y[4] > DTOS(x[3])+x[4] } )
     
      ASort( aDir4 ,,, {|x,y| DTOS(y[3])+y[4] > DTOS(x[3])+x[4] } )

      aFiles1:={}
   
      IF Len(aDir1) > 0
         AEval(aDir1,{|f| AAdd(aFiles1,{Upper(cPastaTemp+HB_PS()+f[F_NAME]), DTOS(f[F_DATE])+" "+f[F_TIME],Upper(f[F_NAME]),f[F_SIZE]})})
         ASort( aFiles1 ,,, {|x,y| y[2] > x[2] } )
      ENDIF

      aFiles2:={}
   
      IF Len(aDir2) > 0
         AEval(aDir2,{|f| AAdd(aFiles2,{Upper(cPastaTemp+HB_PS()+f[F_NAME]), DTOS(f[F_DATE])+" "+f[F_TIME],Upper(f[F_NAME]),f[F_SIZE]})})
         ASort( aFiles2 ,,, {|x,y| y[2] > x[2] } )
      ENDIF

      aFiles3:={}
   
      IF Len(aDir3) > 0
         AEval(aDir3,{|f| AAdd(aFiles3,{Upper(cPastaTemp+HB_PS()+f[F_NAME]), DTOS(f[F_DATE])+" "+f[F_TIME],Upper(f[F_NAME]),f[F_SIZE]})})
         ASort( aFiles3 ,,, {|x,y| y[2] > x[2] } )
      ENDIF

      aFiles4:={}
   
      IF Len(aDir4) > 0
         AEval(aDir4,{|f| AAdd(aFiles3,{Upper(cPastaTemp+HB_PS()+f[F_NAME]), DTOS(f[F_DATE])+" "+f[F_TIME],Upper(f[F_NAME]),f[F_SIZE]})})
         ASort( aFiles4 ,,, {|x,y| y[2] > x[2] } )
      ENDIF
     
      IF Len(aFiles1) > 0
         
         FOR A:=1 TO Len(aFiles1)
       
            TRY

               cPrinter:=WIN_PrinterGetDefault()
               oPrn:=Win_Prn():New(cPrinter)
               oPrn:LandScape := .F.
               oPrn:FormType  := WIN_DMPAPER_A4
               oPrn:Copies    :=  1
               oPrn:LeftMargin:=  0
               
               IF !oPrn:Create()
                  BREAK
               ENDIF
               
               IF !oPrn:StartDoc("ImpressÆo do arquivo "+aFiles1[A,3])
                  BREAK
               ENDIF
           
               oPrn:SetPrc(1.2,0) // 1.2
               nTam       :=11
               VM_nNormal :=12
               lNegrito   :=.F.
               lEject     :=.F.
               cTam       :=""   
     
               oPrn:SetFont("Courier New",VM_nNormal,0,.F.,.F.)

               FT_FUSE( aFiles1[A,1] )
           
               aVetor:={0,0}
           
               DO WHILE !FT_FEOF()
                  cLinha:=FT_FREADLN()
                  lEject:=(Chr(12) $ cLinha) // Procura caracter EJECT
                  cLinha:=StrTran( cLinha, Chr(12)) // Elimina caracter EJECT
                  cLinha:=StrTran( cLinha, Chr(13))

                  nTam14  := AT(Chr(14),cLinha)
                  nTam15  := AT(Chr(15),cLinha)
                  nTam16  := AT(Chr(16),cLinha)                   
                  nTam17  := AT(Chr(17),cLinha)
                  nTam18  := AT(Chr(18),cLinha)
                  nTam20  := AT(Chr(20),cLinha)

                  IF nTam14 > 0 //60 CPL
                     oPrn:LineHeight := Int( oPrn:PixelsPerInchY / 5 ) // 10 Default 6 lines per inch == # of pixels per line
                     cLinha:=StrTran(cLinha, Chr(14))
                     cLinha:=LTrim(cLinha)
                     VM_nNormal:=16
                     aVetor:={0,0}
                     aVetor:={VM_nNormal,-126}
                  ENDIF
                 
                  IF nTam15 > 0 //140 CPL
                     oPrn:LineHeight := Int( oPrn:PixelsPerInchY / 10 ) // 10 Default 6 lines per inch == # of pixels per line
                     cLinha:=StrTran(cLinha, Chr(15))
                     cLinha:=LTrim(cLinha)
                     VM_nNormal:=7.0
                     aVetor:={0,0}
                     aVetor:={VM_nNormal,-126}
                     //aVetor:={3,-16.66}
                  ENDIF

                  IF nTam16 > 0 //120 CPL
                     oPrn:LineHeight := Int( oPrn:PixelsPerInchY / 10 ) // 10 Default 6 lines per inch == # of pixels per line
                     cLinha:=StrTran(cLinha, Chr(16))
                     cLinha:=LTrim(cLinha)
                     VM_nNormal:=8
                     aVetor:={0,0}
                     aVetor:={VM_nNormal,-126}
                  ENDIF
                                   
                  IF nTam17 > 0 //96 CPL
                     oPrn:LineHeight := Int( oPrn:PixelsPerInchY / 7 ) // 10 Default 6 lines per inch == # of pixels per line
                     cLinha:=StrTran(cLinha, Chr(17))
                     cLinha:=LTrim(cLinha)
                     VM_nNormal:=10
                     aVetor:={0,0}
                     aVetor:={VM_nNormal,-126}
                  ENDIF
     
                  IF nTam18 > 0 //80 CPL
                     oPrn:LineHeight := Int( oPrn:PixelsPerInchY / 6 ) // 10 Default 6 lines per inch == # of pixels per line
                     cLinha:=StrTran(cLinha, Chr(18))
                     cLinha:=LTrim(cLinha)
                     VM_nNormal:=12
                     aVetor:={0,0}
                     aVetor:={VM_nNormal,-126}
                  ENDIF
                 
                  IF nTam20 > 0 //160 CPL
                     oPrn:LineHeight := Int( oPrn:PixelsPerInchY / 10 ) // 10 Default 6 lines per inch == # of pixels per line
                     cLinha:=StrTran(cLinha, Chr(20))
                     cLinha:=LTrim(cLinha)
                     VM_nNormal:=6.5
                     aVetor:={0,0}
                     aVetor:={VM_nNormal,-126}
                  ENDIF
     
                  oPrn:SetFont("Courier New",VM_nNormal,aVetor,0,.F.,.F.)

                  oPrn:Bold(0) // Normal
                  oPrn:SetPos( 15 )
                  oPrn:TextOut(cLinha,.T.)
                  FT_FSKIP()
                  IF lEject .AND. !FT_FEOF()
                     oPrn:NewPage()
                     oPrn:SetPrc(1.2,0) //1.2
                  ENDIF
                  IF (oPrn:MaxRow() - 2) <= oPrn:Prow() // Usa "oPrinter:NewPage()" para iniciar nova pagina
                     oPrn:NewPage()
                     oPrn:SetPrc(1.2,0) // 2.2
                  ENDIF
               ENDDO
               FT_FUSE()
               oPrn:EndDoc()
               oPrn:Destroy() // destroi a classe
            CATCH oErro
               FT_FUSE()
               FERASE(aFiles1[A,1])
               oPrn:EndDoc()
               oPrn:Destroy() // destroi a classe
            FINALLY   
               FERASE(aFiles1[A,1])
               FERASE(StrTran(aFiles1[A,1],".PI",".PF"))
            END
         NEXT
      ENDIF
       
      IF Len(aFiles2) > 0
         FOR A:=1 TO Len(aFiles2)

            cArqPrint:=aFiles2[A,1]

            cPrinter:=WIN_PrinterGetDefault()

            ImprimeRaw(cArqPrint,cPrinter)
           
            FErase(aFiles2[A,1])

         NEXT
      ENDIF

      IF Len(aFiles3) > 0
         FOR A:=1 TO Len(aFiles3)

            cArqPrint:=aFiles3[A,1]

            cPrinter:=WIN_PrinterGetDefault()

            ImprimeRaw(cArqPrint,cPrinter)
           
            FErase(aFiles3[A,1])

         NEXT
      ENDIF

      IF Len(aFiles4) > 0
         FOR A:=1 TO Len(aFiles4)

            cArqPrint:=aFiles4[A,1]

            cPrinter:=WIN_PrinterGetDefault()

            ImprimeRaw(cArqPrint,cPrinter)
           
            FErase(aFiles4[A,1])

         NEXT
      ENDIF
     
   CATCH oErro
   FINALLY   
   END
RETURN Nil

FUNCTION LogSis(cEvento,cArqLog)
   HB_Default(@cArqLog,"SISTEMA.LOG")
   IF !File(cArqLog)
      EscreveLinha(cEvento,cArqLog)
   ELSE
      AbreLinha(1,cArqLog)
      EscreveLinha(cEvento,cArqLog)
   ENDIF
RETURN Nil

FUNCTION AbreLinha(nLinha,cArq)
LOCAL I
   HB_Default(@nLinha,1)
   FOR I:=1 TO nLinha
      StrFile(""+HB_EOL(),cArq,.T.)
   NEXT
RETURN Nil

FUNCTION EscreveLinha(cVar,cArq)
   StrFile(cVar,cArq,.T.)
RETURN Nil

FUNCTION ImprimeRaw(cArqImp,cPrinter)
LOCAL cMsg:="", nRet
 
      nRet:=WIN_PrintFileRaw(cPrinter,cArqImp,'PRINTWIN')
      IF nRet < 0
         cMsg := 'Erro Imprimindo: '+Str(nRet)+" "
         SWITCH nRet
         CASE -1
            cMsg+="Parâmetros in lidos passados para função."   ; EXIT
         CASE -2
            cMsg+="WinAPI OpenPrinter() falha na chamada."      ; EXIT
         CASE -3
            cMsg+="WinAPI StartDocPrinter() falha na chamada."  ; EXIT
         CASE -4
            cMsg+="WinAPI StartPagePrinter() falha na chamada." ; EXIT
         CASE -5
            cMsg+="WinAPI malloc() falha de memória."           ; EXIT
         CASE -6
            cMsg+="Arquivo " + cArqImp + " não LOCALIZADO."        ; EXIT
         END
      ENDIF
RETURN Nil

FUNCTION MyRun( cComando )
LOCAL oShell, lOk:=.T.
   TRY
      oShell:=CreateObject( "WScript.Shell" )
   CATCH
      TRY
         oShell:=CreateObject( "WScript.Shell" )
      CATCH
         lOk:=.F.
      END
   END
   IF lOk
      TRY
        oShell:Run( "%comspec% /c " + cComando, 0, .T. )
      CATCH
         lOk:=.F.
      END
      oShell:=Nil
   ENDIF
RETURN lOk

INIT FUNCTION AppSetup()
 
  REQUEST HB_LANG_PT
  REQUEST HB_CODEPAGE_PT850
  HB_LANGSELECT("PT")
  HB_CDPSELECT( "PT850" )

  REQUEST DBFCDX
  RddSetDefault("DBFCDX")

  SETMODE(25,80)
  SET CENTURY ON
  SET EPOCH TO 1920

  CLS
 
  IniciaJanela()

RETURN Nil

FUNCTION IniciaJanela(nLi,nCi,nLf,nCf)

LOCAL oCrt
   HB_Default(@nLi,0)
   HB_Default(@nCi,0)
   HB_Default(@nLf,MaxRow())
   HB_Default(@nCf,MaxCol())
 
  cTituloJanela:="Teste Serviço de Impressão"

  HB_gtInfo(HB_GTI_FONTNAME, "Lucida Console")
  HB_gtInfo(HB_GTI_WINTITLE, cTituloJanela)
  HB_gtInfo(HB_GTI_CLOSABLE, .F. )
  HB_gtInfo(HB_GTI_CLIPBOARDDATA )
  HB_gtInfo(HB_GTI_SELECTCOPY, .T. )
  HB_gtInfo(HB_GTI_MOUSESTATUS, 1 )
  HB_gtInfo(HB_GTI_ISGRAPHIC, .T. )
  HB_gtInfo(HB_GTI_STDERRCON, .T. )
  HB_gtInfo(HB_GTI_COMPATBUFFER, .T. )
  HB_gtInfo(HB_GTI_SPEC, HB_GTS_WNDSTATE, HB_GTS_WS_MAXIMIZED )

RETURN Nil

â–ºHarbour 3.x | Minigui xx-x | HwGuiâ—„
Pense nas possibilidades abstraia as dificuldades.
Não corrigir nossas falhas é o mesmo que cometer novos erros.
A imaginação é mais importante que o conhecimento. (Albert Einstein)
Avatar de usuário

asimoes
Colaborador

Colaborador
 
Mensagens: 4919
Data de registro: 26 Abr 2007 16:48
Cidade/Estado: RIO DE JANEIRO-RJ
Curtiu: 341 vezes
Mens.Curtidas: 258 vezes

Erro testando aplicação serviço com windows 7/64

Mensagempor RobertoLinux » 27 Out 2018 08:37

Bom Dia!

Sei que esta bem atrasado, mas ... como diz o Rochinha vai para à ToolBox!

Segue o link ..

http://nssm.cc/

Felicidades !
Entusiasta
Avatar de usuário

RobertoLinux
Usuário Nível 3

Usuário Nível 3
 
Mensagens: 110
Data de registro: 14 Abr 2014 18:32
Cidade/Estado: Fortaleza/Ce
Curtiu: 7 vezes
Mens.Curtidas: 6 vezes

Erro testando aplicação serviço com windows 7/64

Mensagempor NiltonGM » 20 Jun 2021 12:29

Dica: Uma das regras básicas sobre executar uma aplicação como um serviço é que: O serviço quando é startado, "ele" não sabe de onde ele veio, ou seja, de que diretório ele foi chamado, por isso existe duas soluções:
1. Trabalhar com path completos sempre que for manipular ou referenciar um arquivo ou pasta (não prefiro essa)
2. Na instalação do serviço (aplicativo), na configuração inicial, salvar os paths completos no registro (registers) do Windows (Não sei como fazer isso no Linux) dos arquivos e pastas a serem manipuladas (meu preferido)
Nilton Medeiros
nilton@sistrom.com.br
Avatar de usuário

NiltonGM
Usuário Nível 3

Usuário Nível 3
 
Mensagens: 393
Data de registro: 05 Jun 2014 23:47
Cidade/Estado: Caieiras/SP
Curtiu: 249 vezes
Mens.Curtidas: 25 vezes




Retornar para Harbour

Quem está online

Usuários vendo este fórum: Nenhum usuário registrado online e 3 visitantes


Ola Amigo, espero que meu site e forum tem lhe beneficiado, com exemplos e dicas de programacao.
Entao divulgue o link da Doacao abaixo para seus amigos e redes sociais ou faça uma doacao para o site forum...
MUITO OBRIGADO PELA SUA DOACAO!
Faça uma doação para o forum
cron
v
Olá visitante, seja bem-vindo ao Fórum Clipper On Line!
Efetue o seu login ou faça o seu Registro