Я хотел бы выполнить следующее требование в Windows 7 с учетной записью гостя

  1. Пользователь не сможет видеть / выбирать определенный принтер во время печати, например, с помощью Microsoft Word, Adobe Reader и т.д.
  2. Однако пользователю разрешено печатать на этом скрытом принтере с помощью моего собственного разработанного приложения. (Что означает, что само приложение сможет отправлять данные на скрытый принтер для печати)

Я думаю, что один из подходов - отключить разрешение "Печать" для этой гостевой учетной записи. Принтер будет скрыт от пользователя, но это не позволяет пользователю печатать.

Могу ли я узнать, есть ли способ достичь этого? Либо программно, либо с настройкой.

1 ответ1

2

Разрешить принтеру печатать из выбранного приложения может быть сложно. В Windows такого механизма нет, но вы можете обойти это как-нибудь. У меня есть грязная идея, вы можете подумать об этом больше, и, возможно, вы найдете что-то лучшее или менее сложное.

Вы можете управлять разрешениями на принтеры, включая локальные принтеры в Windows (начиная с Windows 2000).

I. Блокируйте разрешения на печать для гостя (или группы гостей или другого пользователя, который должен использовать вашу программу) - чтобы отключить обычную печать для этой учетной записи / группы.

  1. Перейти к Устройства в принтерах (в панели управления)
  2. Щелкните правой кнопкой мыши на принтере и выберите "Свойства принтера" (а не только "Свойства"!)
  3. Там должна быть вкладка Безопасность. Вы можете управлять разрешениями для учетных записей и групп.
  4. Настройте разрешения для своей учетной записи "Гость" (или группы "Гость", решать только вам).

II. Подготовьте систему и ваше приложение для печати от имени другого пользователя.

  1. Добавьте дополнительную учетную запись Windows и дайте ей возможность распечатать. Возможно, вы захотите отключить для него обычный вход в систему (я думаю, что удаление этого пользователя из группы «Пользователи» не позволит этому пользователю появиться на экране входа в систему).

  2. Поделитесь своим принтером (обычно, как для сети)

  3. В вашем приложении - используйте функцию, соответствующую вашему языку программирования, которая выполняет команды командной строки. Для .NET это может быть System.Диагностика.Процесс.Start (строка Command), в Python os.system (cmd) и т.д.

    net use \\localhost \printer_share_name /u:nonguestaccountname nonguestaccountpassowrd "

    Это отобразит ваш принтер как другого пользователя (надеюсь - мгновенно), используя разрешение на печать с учетной записью nonguestaccountname (печать будет выполнена как другой пользователь, которого мы создали ранее).

  4. Возможно, вам придется подождать, пока не будет выполнено сопоставление принтера, прежде чем пытаться печатать, обрабатывать ошибки и т.д.
  5. Управляйте печатью в приложении
  6. Выполнение:

    net use \\localhost \printer_share_name /delete

    Это распечатает ваш принтер (надеюсь - мгновенно).

Все это должно занять меньше секунды - хотя в это время пользователь может печатать из любого приложения, в моей идее есть дыра, но обычные пользователи, вероятно, не поймут, что происходит, и этого должно быть достаточно, чтобы сэкономить бумагу / чернила / тонеры в компании или что-то :)

С сетевым принтером - это может быть ненадежно, медленно и может зависеть от качества / нагрузки сети LAN, но если вы сопоставляете локальный принтер как сетевой принтер - он должен работать очень быстро.

Как я писал ранее - это очень грязный метод, но я не нашел другого метода, кроме временного сопоставления принтеров, как другой пользователь. Это не на 100% надежно и безопасно, но для некоторых целей вы можете использовать его.

Все, что я написал выше, можно автоматизировать с помощью сценариев CMD или VBS в установщике вашего приложения.

ДРУГОЙ МЕТОД может выполнять принтер для совместного использования / отмены общего доступа, но в любом случае вам потребуется дополнительная учетная запись Windows.

Дополнительные советы:

Совместное использование принтера из командной строки

(замените en-US в пути к вашей локали, если вы не используете английские окна)

Редактировать:

Возможно, вам придется проверить это в Vista Basic и XP Home edition, они могут иметь упрощенный интерфейс управления разрешениями, а некоторые функции скрыты (я помню, что в некоторых упрощенных выпусках Windows нет вкладки "Безопасность" или чего-то в этом роде).

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .