Добавление заданий в очередь печати конкретного пользователя

У меня есть приложение, которое выполняет некоторую центральную генерацию файлов на основе запросов пользователя.Что я хочу сделать с ним после создания файлов, так это поместить их в очередь печати этого пользователя (в этой организации есть центральная очередь печати, поэтому пользователи несут ответственность за печать своих собственных документов), чтобы они могли быть затем распечатывается, когда пользователь готов.

Используя сборки System.Printingв .net, я могу добавить задание в свою собственную очередь печати, так что я в этом уверен. Мой код печати выглядит так:

private void RunPrintJob( string myFileName )
    {
        PrintServer ps = new PrintServer(@"\\printatron");
        PrintQueue queue = new PrintQueue(ps, "psandqueues");
        try
        {
            PrintSystemJobInfo pj = queue.AddJob(myFileName);
            Stream myStream = pj.JobStream;
            Byte[] myByteBuffer = GenerateBufferFromFile(myFileName);                myStream.Write(myByteBuffer, 0, myByteBuffer.Length);
            myStream.Close();
        }
        catch (Exception ed)
        {
            Debug.WriteLine(ed.Message);
            if (ed.InnerException != null)
            {
                Debug.WriteLine(" -> " + ed.InnerException);
            }
            result = false;
        }
        queue.Commit();
    }

Итак, у меня есть централизованно созданные документы, я знаю, какой пользователь отвечал за их создание, и я могу отправить их на печать.

Что мне нужно сейчас, так это способ отправить их на принтер с пользователем, который их создал, установленным как их пользователь. Есть ли способ сделать это через очередь печати? Я знаю, что его можно прочитать из свойства PrintSystemJobInfo.Submitter, но оно доступно только для чтения. Если нет, должен ли я делать это через олицетворение, и если да, то в последнем случае могу ли я что-нибудь сделать, чтобы избежать необходимости хранить кучу пользовательских паролей и сбоя программного обеспечения каждый раз, когда пользователь меняет свой пароль? Кажется, это будет очень неуклюжий способ работы, но, поскольку это действие в настоящее время не выполняется в интерактивном режиме, какие у меня есть другие варианты?

7
задан glenatron 21 May 2012 в 16:21
поделиться