以下是我们要做的事情:
我们希望采用一种不显眼的方式将客户打印在计算机上的所有内容(我们所有的客户都运行POS系统并专门使用Windows XP)并将其发送给我们,我们决定最好的方法是创建ac#app,向我们发送他们的假脱机文件,我们已经可以轻松解析了。
但是,这需要将“保留所有打印文档”设置为true。我们希望在我们的应用程序中而不是手动执行此操作,原因如下:由于缺少更好的词,我们的一些(数百)客户是愚蠢的。我们不想强迫他们在控制面板中乱七八糟......我们的技术支持人员非常忙碌。
这是我遇到问题的地方:
string searchQuery = "SELECT * FROM Win32_Printer";
ManagementObjectSearcher searchPrinters = new ManagementObjectSearcher(searchQuery);
ManagementObjectCollection printerCollection = searchPrinters.Get();
foreach (ManagementObject printer in printerCollection)
{
PropertyDataCollection printerProperties = printer.Properties;
foreach (PropertyData property in printerProperties)
{
if (property.Name == "KeepPrintedJobs")
{
printerProperties[property.Name].Value = true;
}
}
}
据我所知,从几个小时的WMI研究中可以看出,将每台打印机的KeepPrintedJobs属性设置为true ...但它不起作用。 foreach循环结束后,KeepPrintedJobs将重新设置为false。我们更喜欢使用WMI而不是在注册表中乱七八糟,但我不能花费太多时间来尝试使这项工作。关于什么缺失的任何想法?
答案 0 :(得分:3)
尝试在Put()
上添加对ManagementObject
的调用以明确保留更改,如下所示:
foreach (ManagementObject printer in printerCollection)
{
PropertyDataCollection printerProperties = printer.Properties;
foreach (PropertyData property in printerProperties)
{
if (property.Name == "KeepPrintedJobs")
{
printerProperties[property.Name].Value = true;
}
}
printer.Put();
}
希望有所帮助。