Итак. Windows Server 2008R2 (Должно работать на всем начиная с Windows7, хотя, может, и под XP сработает, не проверял). В моем случае есть web-сервис. У него есть метод InserCustomer(sXML). Все это неважно. Важно, в каком контексте этот метод вызывается. А вызывается он в контексте пользователя USR1CV82. Т.е. очень ограниченные права. Запустить что-либо из под нее не всегда получается. В моем случае нужно было именно запустить приложение, которое не может выполняться под такой урезанной учетной записью.
На выручку приходит Планировщик задач. Создаем там задачу. Все просто. Расписание можно не указывать (а если нужно — можно и указать). Важно указать учетную запись, под которой задача должна запускаться, и ввести пароль от этой учетной записи. Все. Более пароль от этой учетки нам нигде оставлять не нужно (и уж тем более в открытом виде).
Далее нам нужно дать права на эту задачу пользователю USR1CV82 (в моем случае, а в вашем, может, и другой, из которого вам нужно давать команду на запуск). Для этого открываем папку C:Windowssystem32Task. Надеюсь, все, у кого Windows установлен в другой директории, смогут найти эту папку самомстоятельно. В этой папке все задачи Планировщика лежат в виде файлов. Находим нашу (по названию) и ПКМ-Свойства-Безопастность. Ну и добавляем чтение/выполнение для пользователя USR1CV82. Да, кстати, если эту задачу нужно будет запускать и из-под других пользователей, то также можно добавить и их. На этом с безопастностью все.
Теперь как запустить эту задачу из web-сервиса 1С (в моем случае) или из любого серверного метода (или вообще от куда угодно). Для этого выполняем такой короткий код:
WshShell=Новый COMОбъект("Wscript.Shell");
WshShell.Run("schtasks /Run /TN НазваниеЗадачиВПланировщике");
Как видите, все очень просто. Удобно, что не требуется никаких внешних средств для администрирования такой простой задачи.
Всем спасибо за внимание. Надеюсь, кому-то помог.
А как хранится список задач планировщика? Держу пари, в виде какого-нибудь конфига, завернутого в хеш, или тот же стандартный виндовый DPAPI. Я к тому, что там пароль тоже хранится наверняка в открытом виде (или условно-открытом).
Советую еще посмотреть в сторонуhttp://admilink.narod.ru/admilink.htm , тулза очень полезная.
(1) demkonst, Да, вы правы. Это просто файл. Но доступ на запись есть только у Владельца изначально (т.е. тот кто создал). Далее он и Администратор могут дать доступ на чтение и/или запись другим пользователям.
По поводу его содержимого. Вот что содержит файл задачи которую я создал при написании статьи:
Показать
Как видите кроме слова PASSWORD ничего о паролях. (К слову, у меня пароль не PASSWORD). При попытке записи задачи система запрашивает пароль того пользователя, под которым она будет в дальнейшем исполнятся. Без ввода пароля указать пользователя нельзя. Запись в этот каталог пользователи не имею. Сложно представить ситуацию при которой возможен обход пароля. Не исключаю что путь есть, но не уровня продвинутого пользователя.
(2) Dimasik2007, Спасибо. Действительно интересная программа. Да и сайт содержит интересную информацию. Но… Я прямо говорю о том, что мой подход хорошо тем, что не требует установки каких-либо сторонних приложение на ваш сервер (ну или просто компьютер). На мой взгляд это бывает важно. Несомненно, возможности предоставляемые программой AdmiLink очень широки, особенно начиная с версии 1.5. И это здорово.
(1) demkonst, Кстати, а DPAPI вы считаете условно открытым?