У меня есть приложение, которое выполняет центральную генерацию файлов на основе запросов пользователей. Что я хочу сделать с ним после создания файлов, так это поместить их в очередь печати этого пользователя (в этой организации есть центральная очередь печати, поэтому пользователи несут ответственность за печать своих собственных документов), чтобы затем они могли быть распечатывается, когда пользователь готов.
Используя сборки 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
, но он доступен только для чтения. Если нет, должен ли я делать это путем олицетворения, и если да, то в последнем случае могу ли я что-нибудь сделать, чтобы избежать необходимости хранить кучу пользовательских паролей и не вызывать сбой программного обеспечения каждый раз, когда пользователь меняет свой пароль? Похоже, это был бы действительно неуклюжий способ работы, но, поскольку это действие в настоящее время не выполняется в интерактивном режиме, какие еще варианты у меня есть?