У меня есть веб-приложение ASP.Net 4.0, работающее на IIS 7.5, я могу получить список установленных принтеров с помощью команды System.Drawing.Printing.PrinterSettings.InstalledPrinters
и назначить каждый отчет в приложении к любому принтеру из списка выше!
На сервере могут быть некоторые принтеры, подключенные к сети , для которых установлены полные привилегии для учетной записи пользователя приложения,все работает идеально, пока учетная запись пользователя приложения не выйдет из Windows, в этот момент System.Drawing.Printing.PrinterSettings.InstalledPrinters
возвращает только локальные принтеры, принтеры, подключенные к сети, не указаны!
Я пытался имитировать процесс ASP.Net для пользователя с доступом к сетевым принтерам следующими способами, но безуспешно.:
Process Model
для запуска в качестве конкретный идентификатор пользователя.Я представил личность Приложения конкретному пользователю в Web.Config:
<identity impersonate="true" userName="user" password="pass"/>
И, наконец, реализовано олицетворение в коде с использованием advapi32.dll
API
Во всех вышеперечисленных методах WindowsIdentity
возвращает истинное имя пользователя при печати:
System.Security.Principal.WindowsIdentity.GetCurrent().Name
Но похоже, что олицетворение не является проблемой здесь, когда пользователь выходит из системы, все принтеры, подключенные к сети, исчезают!
Кто-нибудь знает, как это решить? Есть ли способ получить доступ к сетевым принтерам, даже если пользователь не вошел в систему?