我正在用 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 中得到拒绝访问异常。
我能做些什么来解决这个问题?
在此先感谢您的帮助 :)