在Citrix上通过C#删除打印机

时间:2015-04-15 09:17:49

标签: c# winapi printing citrix

我想从Windows帐户中删除打印机。这将通过Citrix使用。 首先,我想检索为用户安装的所有打印机,然后我想删除打印机。

我使用以下代码执行此操作。 这适用于普通PC。但是,当我通过Citrix使用它时,它不起作用。 并非所有打印机都通过此方法检索。我也无法删除打印机。 有人知道为什么吗? 如何通过Citrix使用此功能? 通过Citrix使用它有什么不同?

using System.Collections.Generic;
using System.Linq;
using System.Management;

namespace RemovePrinter
{
    public class PrinterManager
    {
        public List<string> GetInstalledPrinters()
        {
            var managementScope = new ManagementScope(ManagementPath.DefaultPath);
            managementScope.Connect();

            var selectQuery = new SelectQuery {QueryString = @"SELECT * FROM Win32_Printer"};

            var objectSearcher = new ManagementObjectSearcher(managementScope, selectQuery);
            var ojectCollection = objectSearcher.Get();

            return (from ManagementBaseObject item in ojectCollection select item["Name"].ToString()).ToList();
        }

        public bool DeletePrinter(string printerName)
       {
           var managementScope = new ManagementScope(ManagementPath.DefaultPath);
           managementScope.Connect();

           var selectQuery = new SelectQuery
           {
               QueryString = @"SELECT * FROM Win32_Printer WHERE Name = '" +
                          printerName.Replace("\\", "\\\\") + "'"
           };

           var ojectSearcher = new ManagementObjectSearcher(managementScope, selectQuery);
           var ojectCollection = ojectSearcher.Get();

           if (ojectCollection.Count == 0) return false;

           foreach (var item in ojectCollection.Cast<ManagementObject>())
           {
               item.Delete();
               return true;
           }

           return false;
       }
   }
}

1 个答案:

答案 0 :(得分:1)

ManagementObjectSearcher是WMI API类的一部分。默认情况下,Citrix上未启用这些服务,这就是它无法正常工作的原因。 您需要安装正确的服务,并且拥有使用这些服务的许可。 看看“http://support.citrix.com/article/ctx116423