Попытка безопасности прозрачным методом с принтером

Я пишу приложение на C#, которое позволяет очистить очередь печати по умолчанию.

Для этого у меня есть такой кусок кода:

String spoolDir = "C\\Windows\\System32\\spool\\PRINTERS";
System.IO.DirectoryInfo dir = new System.IO.DirectoryInfo(spoolDir);
int spoolCount = dir.GetFiles().Length;
if (spoolCount > 0)
{
 using (PrintServer ps = new PrintServer())
 {
  System.Drawing.Printing.PrinterSettings settings = new System.Drawing.Printing.PrinterSettings();
  using (PrintQueue pq = new PrintQueue(ps, settings.PrinterName, PrintSystemDesiredAccess.AdministratePrinter))
  {
   pq.Purge();
  }
 }
} 

Я добавил в файл сборки:

[assembly: SecurityRules(SecurityRulesSet.Level1)]
[assembly: AllowPartiallyTrustedCallers]
[assembly: SecurityTransparent()]

К сожалению, я получаю эту ошибку:

Попытка прозрачного для безопасности метода "MS.Internal.PrintWin32Thunk.PrinterDefaults.Dispose(Boolean)" для доступа к критическому методу безопасности "MS.Internal.PrintWin32Thunk.PrinterDefaults.InternalDispose(Boolean)" завершилась неудачно.

Приложение отлично работает на моем ПК (Win 7, 64 бит), где я разрабатываю программу, но выдает исключение, как указано выше, при запуске его на целевом ПК (Win XP, 32 бит).

Приложение использует 4.0 Framework. Я знаю, что одним из способов решения таких проблем является понижение фреймворка до 3.5, но, к сожалению, я использую библиотеку, которая требует 4.0 фреймворка.

Когда я изменяю конструктор PrintQueue на:

PrintQueue pq = new PrintQueue(ps, settings.PrinterName)

Затем я получаю исключение отказа в доступе в Win XP.

Что я могу сделать, чтобы решить проблему?

Заранее спасибо за помощь:)

0 ответов

Другие вопросы по тегам