2014-12-04 2 views
0

Я пытаюсь переименовать принтер с использованием WMI в C#. Я могу запускать запросы для выбора принтеров, но когда я пытаюсь вызвать метод RenamePrinter, я получаю результат «Отказано в доступе». Я попытался запустить это приложение как администратор и создать манифест, но я не могу вызвать этот метод, если только я не запускаюсь под учетной записью администратора.Invoke RenamePrinter как пользователь, не являющийся администратором

var oSearcher = new ManagementObjectSearcher(oMs, oQuery); 
ManagementObjectCollection oReturnCollection = oSearcher.Get(); 
foreach (ManagementObject oReturn in oReturnCollection) 
{ 
    var objectClass = new ManagementClass("Win32_Printer"); 
    var inParams = objectClass.GetMethodParameters("RenamePrinter"); 

    inParams["NewPrinterName"] = "..."; // something 
    ManagementBaseObject oResult = oReturn.InvokeMethod("RenamePrinter", inParams, null); 

    var result = oResult["returnValue"]; // 5 = Access Denied 

Есть ли какой-то способ, которым я могу вызвать RenamePrinter под учетной записью обычного пользователя - даже если это означает, что работает в качестве администратора?

ответ

0

Я пытался это сделать, и я обнаружил, что не могу сделать это с помощью некоторых сетевых принтеров, но с локальными принтерами он работает.

Что я сделал запустить PowerShell в качестве локального администратора и запустить его оттуда:

public void RenamePrinter(string strCurrentName, string strNewPrinterName) 
{ 
    var newProcessInfo = new System.Diagnostics.ProcessStartInfo 
    { 
     FileName = @"C:\Windows\SysWOW64\WindowsPowerShell\v1.0\powershell.exe", 
     Verb = "runas", 
     CreateNoWindow = true, 
     Arguments = "-Command \"$printer = get-wmiobject win32_printer | where { $_.Name -eq '" + strCurrentName + "' }; $printer.RenamePrinter('" + strNewPrinterName + "')\"" 
    }; 
    System.Diagnostics.Process.Start(newProcessInfo); 
} 

Я получаю тот же «Access Denied» ошибка при попытке это с сетевыми принтерами (возможно, это водитель, что я не знаю), но это работает для локальных принтеров.

Смежные вопросы