0

System.Management 名前空間を WMI と共に使用して、リモート サーバーにプリンター/ポートをインストールしています。プリンター/ポートがインストールされたら、テスト ページを印刷し、テスト ページの印刷が (理論的に) 成功したかどうかをキャプチャし、結果をユーザーに表示したいと思います。テストページを印刷する時点まで、すべてが機能しています。

私はこの記事とこの記事たことがありますが、インストールしたばかりの現在のプリンターにそれらを適用する方法がわからないため、どちらもトリックを行っているようには見えません.

とにかく、プリンターをインストールするために使用しているコードは次のとおりです(ポートコードは似ていて、おそらく必要ありません...リモートサーバーにログインするために使用している追加のコードもありますが、それを知っている限り) ConnectionOptions オブジェクトがアタッチされた ManagementScope オブジェクトを作成していますが、そのコードを表示する理由もありません):

foreach (Printers p in lstPrinters)
{
    search = printerQuery + "'" + p.PrinterName + "'";

    query = new SelectQuery(search);

    try
    {
        using (var searcher = new ManagementObjectSearcher(scope, query))
        {
            ManagementObjectCollection printers = searcher.Get();

            ObjectGetOptions oPrinterOptions =
                new ObjectGetOptions(null, TimeSpan.MaxValue, true);
            ManagementPath mPathPrinter =
                new ManagementPath("Win32_Printer");
            ManagementClass mClassPrinter =
                new ManagementClass(scope, mPathPrinter, oPrinterOptions);
            ManagementObject mNewPrinter = mClassPrinter.CreateInstance();

            mNewPrinter["Comment"] = p.Comment;
            mNewPrinter["DeviceID"] = p.DeviceID;
            mNewPrinter["DriverName"] = p.DriverName;
            mNewPrinter["Location"] = p.Location;
            mNewPrinter["Network"] = p.Network;
            mNewPrinter["PortName"] = p.PortName;
            mNewPrinter["Shared"] = p.Shared;
            mNewPrinter["ShareName"] = p.ShareName;

            // If no ports are returned, add the port.
            // Otherwise, update the current port object.
            PutOptions poPutPrinter = new PutOptions();
            poPutPrinter.Type = PutType.UpdateOrCreate;
            poPutPrinter.UseAmendedQualifiers = true;
            mNewPrinter.Put(poPutPrinter);
        }
    }
}

私はこのようなことができると思っていました...これは、上にリストした2番目の記事リンクの例に似ています:

ManagementBaseObject retValue = mNewPrinter.InvokeMethod("PrintTestPage", null);

if (Convert.ToInt32(retValue["ReturnValue"]) == 0)
{
    MessageBox.Show("Test page printed successfully.");
}

理論的には、少なくとも私の頭の中では、上記により、mNewPrinterManagementObject 変数を InvokeMethod に割り当てることで、PrintTestMethod がその特定のサーバー上のそのプリンターにリンクされることが保証されます。

ありがとう...

4

1 に答える 1