C# 尝试使用打印机的安全透明方法
我正在用C#编写一个应用程序,它允许清除default的打印机队列 为此,我有这样一段代码:C# 尝试使用打印机的安全透明方法,c#,.net,security,printers,printqueue,C#,.net,Security,Printers,Printqueue,我正在用C#编写一个应用程序,它允许清除default的打印机队列 为此,我有这样一段代码: 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 (Pr
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(布尔)”到
访问安全关键方法
'MS.Internal.PrintWin32Thunk.PrinterDefaults.InternalDispose(布尔)'
失败了
该应用程序在我正在开发程序的PC(Win 7,64位)上运行得非常好,但在目标PC(Win XP,32位)上运行时会抛出如上所述的异常
应用程序使用4.0框架。我知道解决这些问题的一个方法是将框架降级到3.5,但不幸的是,我使用的库需要4.0框架
当我将PrintQueue构造函数更改为:
PrintQueue pq = new PrintQueue(ps, settings.PrinterName)
然后我在WinXP中遇到访问被拒绝的异常
我能做些什么来解决这个问题
提前谢谢你的帮助:)好吧,你在撒谎。你说你的代码没有任何安全要求。但确实如此,PrintSystemDesiredAccess.AdministratePrinter是不合适的。Kaboom,当您未完全信任运行时。已知问题:“MS.Internal.PrintWin32Thunk.PrinterDefaults.Dispose()上缺少SecurityCritical属性。”相关: