Ir para conteúdo
  • Cadastre-se

dev botao

Ao ACBrETQ.Ativar ocorre um CTD na aplicação C#


OFF-DEV
Ver Solução Respondido por EMBarbosa,
  • Este tópico foi criado há 543 dias atrás.
  • Talvez seja melhor você criar um NOVO TÓPICO do que postar uma resposta aqui.

Recommended Posts

  • Membros Pro

Bom dia Pessoal, tudo bem?


Seguinte, voltando àquele assunto do CTD ao imprimir na Zebra ZD220,  o que eu fiz, peguei o código do Demo ACBR da etiqueta e embuti dentro do meu aplicativo,  veja na imagem pfv.

O efeito é exatamente o mesmo,  ao .ativar(), ocorre um exception com mensagem em branco, e segundos depois na aplicação ocorre um CTD, fechando totalmente sem deixar vestígios do que seja.


Este problema ocorre só no cliente que tem a Zebra instalada, no meu PC, não ocorre CTD, eu envio a impressão para a Zebra , só que por não existir a impressora fisicamente, retorna um erro normal e para por aí....

 

Tudo está rodando no Win11 64 bits numa aplicação C# compilada para Any.

 

Alguém tem alguma ideia se Contexts diferentes da aplicação em c# ou [STAThread]  afetariam a execução do .Ativar() gerando o CTD ? 

CTDimage.png

Editado por OFF-DEV
melhora de título
Link para o comentário
Compartilhar em outros sites

  • OFF-DEV changed the title to Ao ACBrETQ.Ativar ocorre um CTD na aplicação C#
  • Consultores
  • Solution

Olá,

Vamos lá...

1 hora atrás, OFF-DEV disse:

Seguinte, voltando àquele assunto do CTD

Só pra deixar claro e sem ambiguidade, nesse contexto, o "CTD" significa "Crash to Desktop", certo? Se for isso, eu acredito que o que está acontecendo é que uma exception não foi tratada da maneira que deveria. Com isso a aplicação se perdeu.

1 hora atrás, OFF-DEV disse:

Seguinte, voltando àquele assunto do CTD ao imprimir na Zebra ZD220,  o que eu fiz, peguei o código do Demo ACBR da etiqueta e embuti dentro do meu aplicativo,  veja na imagem pfv.

O efeito é exatamente o mesmo,  ao .ativar(), ocorre um exception com mensagem em branco, e segundos depois na aplicação ocorre um CTD, fechando totalmente sem deixar vestígios do que seja.

Uma exception sem mensagem não é muito comum nos códigos do ACBr. Precisamos obter mais informações.

Você consegue testar com o utilitário ETQTeste? Link logo abaixo.. Configure ele para gerar o Log e anexe o log aqui pra nós.

Se funcionar nele, então deveria funcionar na LIB.

 

É importante também verificarmos com detalhes a LIB.

Então, anexe também o log da ACBrLib para gente verificar até onde ela foi sem erros. Coloque o log no nível paranoico por favor.

Outra coisa importante é procurar no Visualizador de Eventos do Windows que informações estão disponíveis sobre o crash de sua aplicação.

A tela é mais ou menos assim:

image.png

As informações que estão ali nas abas "Geral" e "Detalhes" podem ajudar no diagnóstico.

1 hora atrás, OFF-DEV disse:

CTDimage.png

Eu notei que seu código está dentro de um Event Handler. Não sou especialista em C# nem tenho todo o seu códig, mas há uma possibilidade de isso afetar a forma como a aplicação responde. Veja por favor se faz algum sentido o seguinte link: https://stackoverflow.com/a/66163636/460775

Uma outra possibilidade é você atribuir o evento Application.DispatcherUnhandledException. Por meio dele você consegue fazer um log, talvez até um callstack na sua aplicação do momento em que ela crashou.

1 hora atrás, OFF-DEV disse:

Alguém tem alguma ideia se Contexts diferentes da aplicação em c# ou [STAThread]  afetariam a execução do .Ativar() gerando o CTD ? 

Essa já é uma pergunta que você deve levar a pessoas mais experientes no C#. Talvez algum fórum específico de C#.

EDIT:
Só pra deixar claro, a chamada ativar deveria ser apenas uma chamada à lib (uma dll). Assim, teoricamente, nada "externo" deveria influenciar.

Por outro lado, se a exception gerada pela lib está saindo "fora do lugar", talvez o que está "externo" influencie o como ela está sendo tratada.

  • Curtir 2

[]'s

Consultor SAC ACBr

Elton
Profissionalize o ACBr na sua empresa, conheça o ACBr Pro.

Projeto ACBr     Telefone:(15) 2105-0750 WhatsApp(15)99790-2976.

Um engenheiro de Controle de Qualidade(QA) entra num bar. Pede uma cerveja. Pede zero cervejas.
Pede 99999999 cervejas. Pede -1 cervejas. Pede um jacaré. Pede asdfdhklçkh.
Link para o comentário
Compartilhar em outros sites

  • 3 semanas depois ...
  • Membros Pro

 

Prezado Barbosa, desculpe a demora mas a correria está grande, só hoje consegui voltar a este problema.

 

O problema foi resolvido e foi ocasionado por um parâmetro setado errado no ini, por algum motivo foi alterado o parametro Ativo para 1 e com isso qualquer acesso para setar parâmetros pela DLL causava um CTD aleatório em seguida.

 

Procurei nas configurações da biblioteca do ACBR e não é muito claro qual a serventia do parâmetro Ativo do grupo [ETQ], fala somente 'Situação atual'.  Poderiam me esclarecer para que serve este parâmetro?

 

De qualquer modeo, Obrigadão  pela ajuda

 

Editado por OFF-DEV
  • Curtir 1
Link para o comentário
Compartilhar em outros sites

  • Consultores
3 horas atrás, OFF-DEV disse:

Procurei nas configurações da biblioteca do ACBR e não é muito claro qual a serventia do parâmetro Ativo do grupo [ETQ], fala somente 'Situação atual'.  Poderiam me esclarecer para que serve este parâmetro?

Acredito que seja a situação de comunicação com a impressora de etiquetas. Por exemplo, essa propriedade deve marcar "1" depois de chamar o método "ETQ_Ativar", indicando que a comunicação com a impressora foi estabelecida.

3 horas atrás, OFF-DEV disse:

O problema foi resolvido e foi ocasionado por um parâmetro setado errado no ini, por algum motivo foi alterado o parametro Ativo para 1 e com isso qualquer acesso para setar parâmetros pela DLL causava um CTD aleatório em seguida.

Que bom que resolveu. Por outro lado, você consegue detalhar um passo a passo de como reproduzir? Assim a gente ficar pode analisar e orientar os próximos usuários que passarem pelo problema.

[]'s

Consultor SAC ACBr

Elton
Profissionalize o ACBr na sua empresa, conheça o ACBr Pro.

Projeto ACBr     Telefone:(15) 2105-0750 WhatsApp(15)99790-2976.

Um engenheiro de Controle de Qualidade(QA) entra num bar. Pede uma cerveja. Pede zero cervejas.
Pede 99999999 cervejas. Pede -1 cervejas. Pede um jacaré. Pede asdfdhklçkh.
Link para o comentário
Compartilhar em outros sites

  • Membros Pro
15 minutos atrás, EMBarbosa disse:

Por outro lado, você consegue detalhar um passo a passo de como reproduzir? Assim a gente ficar pode analisar e orientar os próximos usuários que passarem pelo problema.

 

aqui acontece assim, usando C# :

 

- antes setar manualmente ATIVO=1  lá no arquivo .ini da seção[ETQ]

- no código da aplicação chamar acbr.ConfigGravarValor salvando Ativo = 0

- no código da aplicação chamar ConfigGravar() para persistir o set anterior;

 

com isso é gerado um exception indetectável na aplicação, ela funciona bem por um minuto ou dois e cai para CTD.

 

 

21 minutos atrás, EMBarbosa disse:

Acredito que seja a situação de comunicação com a impressora de etiquetas. Por exemplo, essa propriedade deve marcar "1" depois de chamar o método "ETQ_Ativar", indicando que a comunicação com a impressora foi estabelecida.

 

 

é necessário usar o ETQ_ATIVAR desta forma como descreveu?  Agora está funcionando bem, porém não usei ETQ_ATIVAR, não explicitamente no código até onde eu saiba.

Link para o comentário
Compartilhar em outros sites

  • Consultores
1 hora atrás, OFF-DEV disse:

aqui acontece assim, usando C# :

 

- antes setar manualmente ATIVO=1  lá no arquivo .ini da seção[ETQ]

- no código da aplicação chamar acbr.ConfigGravarValor salvando Ativo = 0

- no código da aplicação chamar ConfigGravar() para persistir o set anterior;

 

com isso é gerado um exception indetectável na aplicação, ela funciona bem por um minuto ou dois e cai para CTD.

Interessante que não é detectável na aplicação em C#. Em outras linguagens parece não acontecer. Você tem o log da lib desse caso?

1 hora atrás, OFF-DEV disse:

é necessário usar o ETQ_ATIVAR desta forma como descreveu?  Agora está funcionando bem, porém não usei ETQ_ATIVAR, não explicitamente no código até onde eu saiba.

Preciso verificar no código outra vez, mas pode ser que se você chamar um comando de impressão, a lib ative o componente automaticamente.

Geralmente as aplicações preferem usar os métodos ATIVAR e DESATIVAR porque, enquanto ativo, a aplicação prende a porta serial de comunicação com a impressora.

Outro detalhe é que alterar a propriedade "Ativo" no INI para "1" pode ter o mesmo efeito de chamar o método ETQ_ATIVAR.

[]'s

Consultor SAC ACBr

Elton
Profissionalize o ACBr na sua empresa, conheça o ACBr Pro.

Projeto ACBr     Telefone:(15) 2105-0750 WhatsApp(15)99790-2976.

Um engenheiro de Controle de Qualidade(QA) entra num bar. Pede uma cerveja. Pede zero cervejas.
Pede 99999999 cervejas. Pede -1 cervejas. Pede um jacaré. Pede asdfdhklçkh.
Link para o comentário
Compartilhar em outros sites

×
×
  • Criar Novo...

Informação Importante

Colocamos cookies em seu dispositivo para ajudar a tornar este site melhor. Você pode ajustar suas configurações de cookies, caso contrário, assumiremos que você está bem para continuar.

The popup will be closed in 10 segundos...
The popup will be closed in 10 segundos...