2010-11-25 13 views
3

私はいくつかの異なるReporting Servicesレポートを印刷できるWinformsアプリケーションを開発中です。残念ながら、ユーザーがAdobe PDFプリンタを使用してPDFに印刷しようとすると、クラッシュします。私たちはこの問題を解決できませんでした。そのため、回避策として、ユーザーがAdobe PDFプリンタに印刷する機能を削除したいと考えています。.Net印刷ダイアログからプリンタを削除するにはどうすればよいですか?

Adob​​e PDFプリンタを印刷ダイアログボックスのプリンタの一覧からプログラムで削除する方法はありますか?プリントダイアログを呼び出す前に、プリンタ名を持つ

+0

プリンタ名/タイプを選択した後で検出し、その時点でダイアログボックスを開いて別のものを選択するように指示できますか? – Gabe

+0

ReportViewerコントロールでPrintDialog()メソッドを使用しています。 PDFプリンタを選択すると、PrintDialog()メソッド内で例外がスローされます。私たちは例外をキャッチしてダイアログをスローすることができますが、オプションをすべて一緒に削除する方がはるかに良いでしょう。 – JChristian

答えて

2

コールこの()....私はマニッシュからの答えは私が必要なものを私に与えた、これはあなたの問題を解決します

public bool RemovePrinter(string printerName) 
{ 
     ManagementScope scope = new ManagementScope(ManagementPath.DefaultPath); 
     scope.Connect(); 
     SelectQuery query = new SelectQuery("select * from Win32_Printer"); 
     ManagementObjectSearcher search = new ManagementObjectSearcher(scope, query); 
     ManagementObjectCollection printers = search.Get(); 
     foreach (ManagementObject printer in printers) 
     { 
      string printerName = printer["Name"].ToString().ToLower(); 

      if (printerName.Equals(printerName.ToLower())) 
      { 
       printer.Delete(); 
       break; 
      } 
     }      

     return true; 
} 
+5

待機 - これは、プログラムだけでなく、システム全体のプリンタをアンインストールする可能性があるようです。または私は何かを逃している? – Justin

+1

なぜこれが投票を停止しているのか分かりません。これはコードの便利なビットであり、動作するだけでなく、それは私を助けました。 –

+0

私は自分自身をupvote。私が見つけた最初のことは、私が必要としたものだけでした。代替回答で少し拡大します。 –

0

を考えます。私の場合は、ライブラリで作成された仮想プリンタドライバがあり、Printer(1)、Printer(2)などの孤児を残しました。これらのすべてを削除したいので、上記のWMIコード。

using System.Management; 
//... 
var scope = new ManagementScope(ManagementPath.DefaultPath); 
scope.Connect(); 
var query = new SelectQuery([email protected]"select * from Win32_Printer where Name like '{PrinterDeviceName}%'"); 
foreach (var o in new ManagementObjectSearcher(scope, query).Get()) 
    ((ManagementObject) o).Delete(); 

System.Managementへの参照が必要です。

関連する問題