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á 352 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.