VB.NET SO FUNCIONA NA PRIMEIRA EXECUCAO
Meu problema é o seguinte, eu preciso pausar uma impressao e exibir uma tela de autenticação e liberar a impressao caso o usuario tenha permissao. O problema é quando a impressora é compartilhada, pode aparecer a janela de autenticaçao duas vezes, na hora que mando imprimir e na hora que chega no spool onde a impressora esta compartilhada, entao eu tenho que tratar isso, na primeira execuçao eu consigo passar o usuario que foi digitado na tela de autenticaçao, mas na segunda impressao ele ja nao envia mais esse usuario e nao estou conseguindo identificar o problema. Se puderem me ajudar, segue o codigo abaixo:
Quando executo e envio a primeira impressao eu consigo passar o usuario pela opçao .PrintJob.UserInterventionRequired entao o usuario chega na maquina onde esta instalada a impressora compartilhada, mas se enviar outra impressao novamente ele ja nao passa mais o usuario.
Quando executo e envio a primeira impressao eu consigo passar o usuario pela opçao .PrintJob.UserInterventionRequired entao o usuario chega na maquina onde esta instalada a impressora compartilhada, mas se enviar outra impressao novamente ele ja nao passa mais o usuario.
Private Sub pmon_JobAdded(ByVal sender As Object, ByVal e As PrintJobEventArgs) Handles pmon.JobAdded
With CType(e, PrintJobEventArgs)
usuarioLogado = Environment.UserName
If usuarioLogado = .PrintJob.UserName Then
.PrintJob.Paused = True
autenticar = New Form1
retornoAutenticar = autenticar.teste1(retornoAutenticar)
usuario = autenticar.tbUsuario.Text.ToString
If (retornoAutenticar = True) Then
.PrintJob.UserName = usuario
.PrintJob.NotifyUserName = usuario
.PrintJob.Commit()
.PrintJob.Paused = False
MsgBox([Ô]Despausado[Ô])
Do While (.PrintJob.Printing = False And .PrintJob.Printed = False)
.PrintJob.Update()
cont = cont + 1
If cont > 5 Then
pmon.PrintJobs.RemoveByJobId(.PrintJob.JobId)
MsgBox([Ô]Excluiu Job[Ô])
Exit Do
End If
Loop
MsgBox([Ô]JobID:[Ô] & .PrintJob.JobId & vbCr &
[Ô]Usuário:[Ô] & .PrintJob.UserName & vbCr &
[Ô]Página:[Ô] & .PrintJob.PagesPrinted & vbCr &
[Ô]Cor:[Ô] & .PrintJob.Color & vbCr &
[Ô]Copias:[Ô] & .PrintJob.Copies & vbCr &
[Ô]Nome Impressora:[Ô] & .PrintJob.PrinterName & vbCr &
[Ô]NotifyUserName:[Ô] & .PrintJob.NotifyUserName & vbCr &
[Ô]UserInterventionRequired:[Ô] & .PrintJob.UserInterventionRequired & vbCr &
[Ô]PrintProcessorName:[Ô] & .PrintJob.PrintProcessorName & vbCr &
[Ô]Printed:[Ô] & .PrintJob.Printed & vbCr &
[Ô]Status:[Ô] & .PrintJob.StatusDescription & vbCr &
[Ô]PaperOut:[Ô] & .PrintJob.PaperOut & vbCr &
[Ô]Documento:[Ô] & .PrintJob.Document.ToString & vbCr &
[Ô]LogicalPagesPerPhysicalPage:[Ô] & .PrintJob.LogicalPagesPerPhysicalPage & vbCr &
[Ô]Total de páginas impressas:[Ô] & (.PrintJob.PagesPrinted * .PrintJob.Copies), MsgBoxStyle.Information, [Ô]PrintMonitor[Ô])
Else
Try
.PrintJob.Delete()
Catch ex As Exception
End Try
End If
Else
.PrintJob.Paused = False
End If
End With
End Sub
O que você quer dizer como não [Ô]passa mais o usuário[Ô] ?
Ele simplesmente não pede mais autenticação ou você digita o usuário e senha e o mesmo não valida ?
Ele simplesmente não pede mais autenticação ou você digita o usuário e senha e o mesmo não valida ?
Deixa eu tentar explicar melhor pois ficou meio confuso.
Eu tenho duas maquinas rodando este aplicativo, M1 e M2, na M1 eu tenho uma impressora local compartilhada e na M2 eu adicionei essa impressora compartilhada da M1, se eu mandar uma impressao da M2 ira requisita usuario e senha sempre. Tem uma linha no codigo que eu faço uma opçao receber o usuario que foi informado na autenticaçao [Ô].PrintJob.NotifyUserName = usuario[Ô] no momento que essa impressao chega na M1 ela informa corretamente o usuario que foi passado na opçao .PrintJob.NotifyUserName, porem se eu mandar outra impressao na M2 ira aparecer a tela de autenticaçao normalmente, porem na M1 a opçao .PrintJob.NotifyUserName nao mostra o usuario que digitei e sim um outro usuario local da maquina. Esse problema só acontece em impressora compartilhada, se for local ou de rede nao tem este problema.
Eu tenho duas maquinas rodando este aplicativo, M1 e M2, na M1 eu tenho uma impressora local compartilhada e na M2 eu adicionei essa impressora compartilhada da M1, se eu mandar uma impressao da M2 ira requisita usuario e senha sempre. Tem uma linha no codigo que eu faço uma opçao receber o usuario que foi informado na autenticaçao [Ô].PrintJob.NotifyUserName = usuario[Ô] no momento que essa impressao chega na M1 ela informa corretamente o usuario que foi passado na opçao .PrintJob.NotifyUserName, porem se eu mandar outra impressao na M2 ira aparecer a tela de autenticaçao normalmente, porem na M1 a opçao .PrintJob.NotifyUserName nao mostra o usuario que digitei e sim um outro usuario local da maquina. Esse problema só acontece em impressora compartilhada, se for local ou de rede nao tem este problema.
Ah agora eu entendi...rsrsrs
Verifique se na classe [Ô].PrintJob[Ô] existe alguma opção de [Ô]dispose[Ô] ou o parametro de usuario se for uma string tipo (.printjob.notifyUsername=STRING) voce zera o valor da STRING depois da autenticação ter sido bem sucedida.
Verifique se na classe [Ô].PrintJob[Ô] existe alguma opção de [Ô]dispose[Ô] ou o parametro de usuario se for uma string tipo (.printjob.notifyUsername=STRING) voce zera o valor da STRING depois da autenticação ter sido bem sucedida.
Vou fazer os teste e já retorno.
Testei e nao deu certo, se utilizar .printjob.notifyUsername= [Ô][Ô] ele diz que nao tem permissao mais. E se utilizar o .PrintJob.Dispose() também nao da. Estou utilizando a biblioteca PrinterQueueWatch
Mas você zera o valor da string .printjob.notifyUsername= [Ô][Ô] depois da autenticação ter sido bem sucessida e do arquivo já ter sido impresso ?
Mesmo coisa quanto ao dispose.
Mesmo coisa quanto ao dispose.
Sim, mas acho que pelo fato de ja ter sido impresso ele nao da permissao para modificar o .printjob.notifyUsername= [Ô][Ô]. E o Dispose eu nao vi efeito tbm, coloquei tudo depois que ocorreu com sucesso. Vou fazer mais testes para ver. Obrigado pela ajuda
Então na realidade pelo que percebi é que na segunnda impressão ele se [Ô]perde[Ô] quanto ao usuário que está enviando a impressão correto, então por isso estou tentando [Ô]zerar[Ô] a variavel do usuário e tentando [Ô]liberar a classe[Ô] também pelo dispose.
sim, esse é o problema só que nao estou conseguindo [Ô]zerar[Ô]... Talvez seja problema com a biblioteca, nao sei.
Faça seu login para responder