VB.NET SO FUNCIONA NA PRIMEIRA EXECUCAO

CLEDISON 22/01/2013 10:19:30
#417856
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.

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
ALEVALE 22/01/2013 10:34:58
#417858
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 ?
CLEDISON 22/01/2013 10:46:46
#417862
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.
ALEVALE 22/01/2013 10:53:47
#417863
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.
CLEDISON 22/01/2013 11:57:30
#417870
Vou fazer os teste e já retorno.
CLEDISON 22/01/2013 14:50:55
#417899
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
ALEVALE 22/01/2013 15:44:40
#417901
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.
CLEDISON 22/01/2013 15:57:58
#417902
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
ALEVALE 22/01/2013 16:52:31
#417905
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.
CLEDISON 22/01/2013 17:13:22
#417907
sim, esse é o problema só que nao estou conseguindo [Ô]zerar[Ô]... Talvez seja problema com a biblioteca, nao sei.
Faça seu login para responder