のPieter Witvoetによって示唆されるように、ここでXPSPrinterがインストールまたはドライバ名に基づいていない場合に返す方法があります。
このメソッドは、プリンタを見つけるまで、または1つを見つけずにすべてのものをスキャンします。 "System.Management"への参照をプロジェクトに追加する必要があります。
private bool GetIfXPSPrinterIsInstalled()
{
bool isXPSPrinterMissing = true;
try
{
var printerQuery = new System.Management.ManagementObjectSearcher("SELECT * from Win32_Printer");
var iterator = printerQuery.Get().GetEnumerator();
while (iterator.MoveNext() && isXPSPrinterMissing)
{
//isXPSPrinterMissing = iterator.Current.GetPropertyValue("DriverName").ToString() != "Microsoft XPS Document Writer";
isXPSPrinterMissing = !iterator.Current.GetPropertyValue("DeviceID").ToString().ToUpper().Contains("XPS");
}
if (isXPSPrinterMissing)
{
MessageBox.Show("Warning, there is no XPS printer installed on this computer");
}
}
catch (Exception ex)
{
MessageBox.Show("System couldn't verify if there is a XPS printer installed because an error occured");
}
return !isXPSPrinterMissing;
}
EDIT:私はドライバ名がいくつかの時間間違っている可能性があることが分かりました。これは、XPSプリンタやその他のxps以外のプリンタではなく、「Remote Desktop Easy Print」である可能性があります。したがって、DeviceIDにXPSが含まれているかどうかを確認する方が安全です。
名前は間違いなく信頼できません。ユーザーはいつでも「Microsoft XPS Document Writer」プリントキューの名前を変更することができます。 – Jon