2

我正在用 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)”失败。

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

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

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

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

然后我在 Win XP 中得到拒绝访问异常。

我能做些什么来解决这个问题?

在此先感谢您的帮助 :)

4

0 回答 0