Попытка безопасности прозрачным методом с принтером
Я пишу приложение на 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.
Что я могу сделать, чтобы решить проблему?
Заранее спасибо за помощь:)