8

これが私たちがやろうとしていることです:

クライアントがコンピューターに印刷するすべてのもの(すべてのクライアントがPOSシステムを実行しており、Windows XPのみを使用している)を取得して送信する、目立たない方法が必要です。そのための最善の方法は、acを作成することです。 #すでに簡単に解析できるスプールファイルを送信するアプリ。

ただし、これには「すべての印刷ドキュメントを保持する」を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を使用したいのですが、これを機能させるために永遠に費やすことはできません。何が欠けているかについてのアイデアはありますか?

4

1 に答える 1

5

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();
}

お役に立てば幸いです。

于 2013-06-06T17:04:41.603 に答える