Ну т.е. это не ошибка в скрипте, просто каталоги за каждое 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.
В любом случае, не зная конкретики, дальше уже дискутировать бесполезно.
Так же может быть нужно добавить поле DEND - куда заносить дату/время окончания действия аттрибута. Но можно и без этого, тогда дата окончания действия будет равна DBEG новой записи. Т.е. при необходимости подобной выборки запрос будет несколько сложнее, чем при наличии DEND.
Вам надо в потоковую функцию передавать 3 параметра: n0, n1, ∑, а т.к. туда можно передать только один, то заведите для этих целей структуру или массив струтур (по 1 для каждого потока) и в поток передавайте адрес структуры.
В этом случае мьютексы просто не нужны, т.к. не будет в принципе доступа к одним и тем же ресурсам, т.к. каждый поток будет записывать сумму в свою собственную переменную.
В цикле, в котором создается поток, нужно сначала рассчитать для потока значения n0 и n1 и сохранить их в структуру, адрес которой передадите в поток.
Примерный алгоритм расчета n0/n1:
n1 = 0;
delta = maxn1/number_threads;
for( long unsigned int i = 0; i < number_threads; ++i){
n0 = n1 + 1;
if(i<(number_threads-1)
n1 += delta;
else
n1 = maxn1;
t[i] = thread(Work, ... );
}
В коде выше n0 и n1 - должны быть соответствующими членами структуры.
И в заключении - перед выводом суммы вам нужно будет сложить все суммы потоков, это можно сделать в цикле после t[i].join();
Максим: Встроенный фаервол в винде может заблокировать всю подсеть атакующего, когда вы настроите соответствующее правило. Вообще он достаточно продвинутый уже.
И когда это вы сам блокируете контент на сайтах? Если это не родной антивирь, значит это какой-то другой, либо какой-нибудь Adblock. Самому все время это делать - достаточно утомительно. Так что "сам блокирую" - это вы выдаете желаемое за действительное.
А антивирь у мелкомягких, по моему, не хуже других бесплатных антивирей.
Кроме того есть и еще логические ошибки связанные с тем, что по умолчанию в русской винде день возвращается двумя цифрами, тогда первые 9 чисел возвращаются в виде: 01, 02, ... Но в cmd числа начинающиеся на 0 являются восьмеричными, это значит, операция вычисления предыдущего дня для 8 и 9 числа завершится ошибкой и будет удален бэкап за текущий день.
Ну и еще одна ошибка по той же причине: при вычислении
set /a dtDay=%dtDay%-1
первый незначащий ноль будет отброшен и первые 9 дней месяца то же ничего удаляться не будет.
Разбор ошибок закончен!