Дык это Win 2003 Server. Там она появилась после какого-то обновления.
В XP forfiles отсутствует.
Короче, forfiles - относительно новая утилита, и возможен вариант, когда код с ее использованием не заработает.
У меня нет никаких оснований доверять микрософту, более того - я ему совсем не доверяю. Но я бы грешил на реализацию TCP/IP в ОС в самом последнем случае, просто потому что этой реализацией пользуются миллионы людей и компов уже кучу лет.
Ваша программа использует .Net - вы уверены, что там все нормально? Версии .Net были одинаковы в обоих случаях? В плоть до последнего обновления?
Ну и то что у вас нет обработки ошибок при сетевом взаимодействии это как бы само за себя говорит.
На счет exception - предполагаю, что в данном случае его скорее всего не будет, т.к. в работе с сетью ошибки - это нормальная ситуация.
Все таки ищите ошибки в коде. Возможно есть нюансы в реализациях стека для разных ОС или в реализация .Netа разных версий/рахрядностей/ОС.
Ну т.е. это не ошибка в скрипте, просто каталоги за каждое 1 число месяца не будут удаляться и команда rd будет выдавать ошибку.
Кроме того есть и еще логические ошибки связанные с тем, что по умолчанию в русской винде день возвращается двумя цифрами, тогда первые 9 чисел возвращаются в виде: 01, 02, ... Но в cmd числа начинающиеся на 0 являются восьмеричными, это значит, операция вычисления предыдущего дня для 8 и 9 числа завершится ошибкой и будет удален бэкап за текущий день.
Ну и еще одна ошибка по той же причине: при вычислении
set /a dtDay=%dtDay%-1
первый незначащий ноль будет отброшен и первые 9 дней месяца то же ничего удаляться не будет.
Разбор ошибок закончен!
Например как-то так:
set "DIRNAME=c:\TEMP\??.??.??"
Лучше было бы добавить к имени каталога спереди или сзади еще что-нибудь, например backup-dd.mm.yy
Тогда маску по лучше можно было бы сделать.
В скрипте будет ошибка каждое 1 число.
И еще ключ /a в команде set нужен только в последнем случае, в остальных случаях не производится арифметических вычислений.
acyp: Вы контролируете у себя все сетевые соединения на раб.станциях? Какими средствами?
Обычно это делается централизовано на шлюзе/фаерволе, а там не видно какое приложение на раб.станции шлет пакет. Но можно настроить прозрачный прокси, где разрешить только HTTP/HTTPS и тогда моя схема с mstsc работать не будет.
acyp: "по определению пользователи ничего не поставят без админов" - ну это смешно, нет такого определения. Уже даже через стандартный установщик винды можно ставить софт простому пользователю, в этом случае он ставится в профиль пользователя, а не в Program Files. Куча софта это умеет делать.
Но я то предлагаю не устанавливать, а использовать портабельный OpenVPN - распаковал к себе на рабочий стол папочку с OpenVPN и запускай.
"Про маршрутизатор" - обычный проброс портов в NAT на домашнем маршрутизаторе, просто не один в одни (т.е. не 443 в 443), а 443 в 3389 - абсолютно стандартная фишка NAT. На клиенте mstsc к адресу придется добавить и порт: domain.ru:443, он прекрасно это понимает.
Вообще на счет "разрешенных приложений" - в винде в политиках безопасности уже есть эта возможность из коробки, просто по умолчанию она выключена. Настраиваете политику соответствующим образом и тогда никто ничего запустить не сможет не из списка. Если есть АД в сети, то это вообще делается централизованно. И не нужно никакого контроля - просто запуск левых приложений присекается на корню. Как раз про это вариант тотальной паранойи я и писал выше - редко где он внедрен в эксплуатацию.
Но есть и еще более кучерявые методы защиты, например физическое отделение рабочей сети от интернет, так что бы даже теоретически никто не смог в интернет выйти.
acyp: Если в компании есть "список разрешенных приложений", то я думаю, что они за одно и отслеживают куда ходят сотрудники в интернете и точно так же могут это могут пофиксить (это кстати гораздо проще организовать, чем список разрешенных приложений).
Т.е. если в конторе гайки закручивают по полной, то рыпаться в общем-то бесполезно - рано или поздно перекроют все. Но лично я видел только одну контору в реальности где "по полной", поэтому думаю, что и OpenVPN вполне может прокатить. Обычно, когда не сильно запариваются с контролем, мониторят установленные приложения практически средствами винды, т.е. с помощью опроса винды об установленных приложениях. Но если сама система не будет знать, что OpenVPN есть в системе, то и ничего сказать об этом не сможет.
Кстати RDS это не RDP через HTTP - просто мелкософты переименовали службу терминалов в сервис удаленных рабочих столов (RDS), смысл от этого не поменялся. Еще во времена WinXP\2003 когда был RDP, но не было RDS можно было прикрутить веб доступ.
И еще: при чем тут вообще веб доступ - никто не мешает на маршрутизаторе 443 внешний порт перенаправить внутрь на локальную машину на 3389 порт (RDP).
Вы не ответили - сетевой порт сервис открывает, когда запускается через шедулер?
Вышеприведенная команда нормально отрабатывает, если не через шедулер запускать?
Что в логах?
:) задачка
Можно из вашего Window сделать некий промежуточный класс и сделать третий класс, который будет наследовать от Window и Graphics, т.е.
class WindowG: public Window, Graphics
{
WindowG(...): Window(...), Graphics(...)
}
При этом в конструктор WindowG передаете все нужные параметры для Window, в котором вычисляются и сохраняются в качестве членов параметры для конструктора Graphics.
Тогда, возможно, у вас Graphics должен наследовать Window.
Хотя, думаю, вы сгущаете краски. Создать объект Window - это не обязательно его отобразить/нарисовать/открыть, то же самое, вероятно и с Graphics.
В любом случае, не зная конкретики, дальше уже дискутировать бесполезно.
В XP forfiles отсутствует.
Короче, forfiles - относительно новая утилита, и возможен вариант, когда код с ее использованием не заработает.