none
c# asp.net Impossibile accedere a stampanti locali direttamente RRS feed

  • Domanda

  • Devo inviare da una applicazione WEB del testo ad una stampante per etichette mappata come porta locale sul server.

    la stampante è mappata sul server mediante: net use  porta \\ nomepc \ nomestampante

    Nel codice creo e invio un file di testo direttamente all'unità mappata:

    FileInfo fi = new FileInfo(Path.GetTempFileName());
      using (StreamWriter sw = new StreamWriter(fi.FullName)) sw.Write(receiptText);
      fi.CopyTo(Porta);

    Ma questo funziona solo se il sito viene eseguito nell'ambito di un utente che vede la porta (lo stesso server cassini funziona perchè gira nell'ambito di un utente windows), ma purtroppo devo utilizzare 'servizio di rete' che non vede alcuna stampante ritornando errore 'il file <Porta>' non è stato trovato.....'

    A questo punto ho provato a impersonare il codice con un utente che vede l'unità mediante :

     using (new Impersonator("user", "domain", "password"))
     { FileInfo fi = new FileInfo(Path.GetTempFileName());
      using (StreamWriter sw = new StreamWriter(fi.FullName)) sw.Write(receiptText);
      fi.CopyTo(Porta); }

    Putroppo anche in questo caso ottengo lo stesso errore nonostante l'impersonazione funzioni (verificato facendogli leggere senza problemi una cartella in cui servizio di rete non ha accesso)

    Ho provato anche a fargli eseguire mediante Process.Start(...) un bat contenente le istruzioni di stampa ma pare non venga neppure eseguito (non ottengo alcun errore in questo caso ma senza stampa)

    Provato anche ad eseguire un process.start() specificandogli l'utente (startInfo.Domain/user/password...) ma ottengo 'accesso negato' .....

    ECCO Il listato dell'ultima versione che stò testando:

     using (new Impersonator("user", "domain", "password"))
    {  ProcessStartInfo startInfo = new ProcessStartInfo();
                    startInfo.CreateNoWindow = true; 
                    startInfo.UseShellExecute = false; 
                    startInfo.FileName = @"d:\instlpt2.bat";
                    startInfo.Verb = "execute"; //(provato anche con, '', run, runas, open.....)
                    try
                    {
                        using (Process exeProcess = Process.Start(startInfo))
                        {
                            string output = exeProcess.StandardOutput.ReadToEnd();

                            exeProcess.WaitForExit(1000);
                        }
                    }
                    catch (Exception e) { }

      }  

    Il sito gira in ambito IIS 7 (winsrv2008) con app pool a gestione pipeline classica, net2.0, identità='network service'

      AIUTATEMI PER FAVORE, NON SO PIU' CHE FARE

    • Spostato Irina Turcu lunedì 22 aprile 2013 08:37 Topic ASP.NET
    giovedì 31 gennaio 2013 12:26

Risposte

  • Ciao Luca,

    You wrote on 31/01/2013 :

    Il sito gira in ambito IIS 7 (winsrv2008) con app pool a gestione pipeline classica, net2.0, identità='network service'
      AIUTATEMI PER FAVORE, NON SO PIU' CHE FARE

    non lo puoi fare così non ti passa più uscire da tutte le magagne in cui ti infili e alla prima volta che cambi la versione di IIS ricomincia da capo, sarebbe un delirio.

    il problema quasi certamente è derivante dal fatto che la stampate ha bisogno di un utente intereaativo e non uno che gira come servizio.

    La prima prova che farei è quella di provare a realizzare un servizio per windows che faccio girare con un utente ad hoc (e non uno di quelli predefiniti di Windows) che abbia tutti i permessi che sorvono se da li riesci a stampare allora puoi esporre un endpoint WCF che è quello che l'app web chiama per richiedere la stampa.

    .m



    blog @ //milestone.topics.it
    • Contrassegnato come risposta Irina Turcu martedì 11 giugno 2013 12:14
    martedì 23 aprile 2013 05:02
  • Prova a cambiare l'utente con cui gira l'application pool, mettici un'utente di dominio che ha accesso sia al server che alla stampante.

    Ciao


    Luca Congiu (congiuluc)
    Personal Blog: blogs.dotnetcode.it

    • Contrassegnato come risposta Irina Turcu martedì 11 giugno 2013 12:14
    mercoledì 24 aprile 2013 05:40
    Moderatore

Tutte le risposte

  • Ciao,

    ho lo stesso problema. Hai trovato una soluzione?

    Ciao

    martedì 16 aprile 2013 20:02
  • Ciao Luca,

    You wrote on 31/01/2013 :

    Il sito gira in ambito IIS 7 (winsrv2008) con app pool a gestione pipeline classica, net2.0, identità='network service'
      AIUTATEMI PER FAVORE, NON SO PIU' CHE FARE

    non lo puoi fare così non ti passa più uscire da tutte le magagne in cui ti infili e alla prima volta che cambi la versione di IIS ricomincia da capo, sarebbe un delirio.

    il problema quasi certamente è derivante dal fatto che la stampate ha bisogno di un utente intereaativo e non uno che gira come servizio.

    La prima prova che farei è quella di provare a realizzare un servizio per windows che faccio girare con un utente ad hoc (e non uno di quelli predefiniti di Windows) che abbia tutti i permessi che sorvono se da li riesci a stampare allora puoi esporre un endpoint WCF che è quello che l'app web chiama per richiedere la stampa.

    .m



    blog @ //milestone.topics.it
    • Contrassegnato come risposta Irina Turcu martedì 11 giugno 2013 12:14
    martedì 23 aprile 2013 05:02
  • Prova a cambiare l'utente con cui gira l'application pool, mettici un'utente di dominio che ha accesso sia al server che alla stampante.

    Ciao


    Luca Congiu (congiuluc)
    Personal Blog: blogs.dotnetcode.it

    • Contrassegnato come risposta Irina Turcu martedì 11 giugno 2013 12:14
    mercoledì 24 aprile 2013 05:40
    Moderatore