我如何在没有管理员权限的情况下找到运行程序的机器上的所有本地打印机。我需要重新映射打印机IP并将打印机设置为默认打印机。我的想法是使用模拟用户身份来实现这一点,但我不知道在哪里查找打印机,并且是否使用模拟用户身份是一个好的解决方案。
感谢任何帮助!
我认为你在这方面可能不会有什么运气。冒充将不起作用,只会抛出异常。你可以尝试通过进行模拟并尝试打开Environment.Domain来进行验证,这应该会导致异常。
如果没有模拟,你可以尝试类似以下的方式:
ManagementScope mscope = new ManagementScope(@"\root\CIMV2", options);
mscope.Connect();
System.Management.ObjectQuery oQuery = new ObjectQuery("Select * from Win32_TCPIPPrinterPort");
System.Management.ManagementObjectSearcher searcher = new ManagementObjectSearcher(mscope, oQuery);
ManagementObjectCollection moCollection = searcher.Get();
foreach (ManagementObject mo in moCollection)
{
string name = mo["Name"].ToString();
if (name.Equals(this.portName))
{
System.Threading.Thread.Sleep(10000);
mo["HostAddress"] = this.printerIP;
mo.Put();
Console.WriteLine("Adjusted Printer Port to new IP address " + this.printerIP);
return true;
}
}