Сбой AddPrinterConnection с Win32_Printer - PullRequest
1 голос
/ 16 марта 2020

У меня есть простая программа, которая добавляет указанное c подключение принтера к серверу и печатает на этом принтере документ в формате PDF. После печати документа подключение к принтеру будет удалено.

Теперь все работает нормально, когда я запускаю приложение в качестве собственной учетной записи администратора. Но когда я запускаю приложение с учетной записью пользователя службы, я не могу добавить подключение к принтеру. Сбой с кодом ошибки 87: INVALID_PARAMETER

Примечание. Если подключение принтера к аппарату (серверу) доступно, тогда я могу печатать с использованием учетной записи пользователя службы. Только добавление соединения с принтером, которое не существует, не работает.

Вот фрагмент кода:

    private static ManagementScope oManagementScope = null;

    public static bool AddPrinter(string printerName)
    {
        var result = false;
        try
        {
            oManagementScope = new ManagementScope(ManagementPath.DefaultPath);
            oManagementScope.Connect();

            using (ManagementClass win32Printer = new ManagementClass("Win32_Printer"))
            {
                using (ManagementBaseObject inputParam = win32Printer.GetMethodParameters("AddPrinterConnection"))
                {
                    inputParam.SetPropertyValue("Name", printerName);

                    using (ManagementBaseObject methodResult = win32Printer.InvokeMethod("AddPrinterConnection", inputParam, null))
                    {
                        uint errorCode = (uint)methodResult.Properties["returnValue"].Value;

                        switch (errorCode)
                        {
                            case 0:
                                Logger.LogInfo("Successfully connected printer.");
                                result = true;
                                break;
                            case 5:
                                Logger.LogError("Access Denied.");
                                break;
                            case 123:
                                Logger.LogError("The filename, directory name, or volume label syntax is incorrect.");
                                break;
                            case 1801:
                                Logger.LogError("Invalid Printer Name: " + printerName);
                                break;
                            case 1930:
                                Logger.LogError("Incompatible Printer Driver.");
                                break;
                            case 3019:
                                Logger.LogError("The specified printer driver was not found on the system and needs to be downloaded.");
                                break;
                            default:
                                Logger.LogError("Could not add the specific printer, Error Code: " + errorCode);
                                break;
                        }
                    }
                }
            }
        }
        catch (Exception ex)
        {
            Logger.LogError(ex.Message + ", " + ex.InnerException?.Message);
        }

        return result;
    }

Мы уже пытались добавить те же разрешения для пользователя службы, что и У меня есть на моем админ-аккаунте. Я все еще получаю код ошибки 87 при добавлении подключения к принтеру.

Поскольку я немного исследовал код ошибки 87, я обнаружил, что это означает что-то вроде НЕВЕРНЫЙ ПАРАМЕТР. Но я не могу понять, какой параметр должен быть недействительным, и почему он работает на сервере, когда я запускаю его с моей учетной записью администратора?

Любая помощь приветствуется

Спасибо

...