用打印机尝试安全透明方法

时间:2015-01-12 23:25:42

标签: c# .net security printers printqueue

我正在用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)'to   访问安全关键方法   'MS.Internal.PrintWin32Thunk.PrinterDefaults.InternalDispose(布尔值)'   失败。

该应用程序在我正在开发程序的PC(Win 7,64 bit)上完美运行,但在目标PC(Win XP,32位)上运行时,如上所述抛出异常。

应用程序使用4.0框架。我知道这个问题的一个解决方法是将框架降级到3.5,但不幸的是我正在使用一个需要4.0框架的库。

当我将PrintQueue构造函数更改为:

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

然后我在Win XP中获得访问被拒绝的异常。

我该怎么做才能解决问题?

提前感谢您的帮助:)

0 个答案:

没有答案