Я пишу установщик драйвера принтера.Помимо прочего, он может создать принтер Ethernet, а это значит, что мне нужно создать порт принтера Ethernet.
Код, который я использовал для создания порта (см. Ниже), отлично работает на 32-битной Windows XP, WindowsVista 32 и 64 бит и Windows 7 32 и 64 бит.Однако, когда код запускается в 64-разрядной Windows XP, я получаю исключение отказа в доступе.
Вот код C #, сводящийся к простой форме, которая выдает ошибку:
static void Main(string[] args)
{
ManagementClass portClass = new ManagementClass("Win32_TCPIPPrinterPort");
ManagementObject portObject = portClass.CreateInstance();
portObject["Name"] = "TestPort";
portObject["HostAddress"] = "172.16.2.78";
portObject["PortNumber"] = 9100;
portObject["Protocol"] = 1;
portObject["SNMPEnabled"] = false;
PutOptions options = new PutOptions();
options.Type = PutType.UpdateOrCreate;
try
{
portObject.Put(options);
}
catch (ManagementException e)
{
Console.WriteLine("ManagementException: " + e.Message);
}
}
При запуске программы я вошел в систему как администратор, и я также попытался щелкнуть правой кнопкой мыши и сделать «Запуск от имени» администратора, но это не имеет никакого эффекта.У меня также есть манифест, чтобы заставить приложение запускаться от имени администратора в Windows Vista / 7;Я не уверен, как это влияет на 64-разрядную версию Windows XP.
Большая часть информации, которую я нашел в Интернете, касается использования WMI на удаленном компьютере, но все это относится к локальному компьютеру.