7

Мне было поручено исправить программу поставщика, которая при определенных условиях сбрасывает гигабайты ненужных файлов в каталог журналов. Это заканчивается заполнением машин пользователей. Моя задача состоит в том, чтобы выяснить, как заставить его остановиться без какого-либо исходного кода или дополнительных запущенных процессов, а также без выполнения программы kasplode. Другими словами, я хочу использовать функцию файловой системы для управления ростом.

Одна из моих идей заключалась в том, чтобы сделать жесткую ссылку из этой папки на NUL, как вы могли бы сделать с помощью /dev/null в мире linux. Однако мои попытки использовать программу mklink для создания соединения приводят к сообщению, в котором говорится, что Local volumes are required to complete the operation.

Любые идеи о том, как завершить перекресток, или другие идеи для решения проблемы?

7 ответов7

1

Нет. Жесткие ссылки доступны только внутри NTFS, и NUL-файл не является NTFS-файлом - это имя WIN32 для \.Объект пространства имен \Devices \NULL, но вы не можете создать жесткую ссылку на него.

Вы можете создать мягкую ссылку (ярлык) на файл NUL, если хотите, но я не могу понять, почему это было бы хорошей идеей.

1

Я просто плюю на идеи, но:

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

Если программа вендора создает какое-то системное событие, которое читает Windows, возможно, вы можете создать сценарий, который удаляет папку нежелательной почты (batch, cmd или powershell). Если это возможно, не забудьте подождать, пока программа продавца не выполнит дамп.

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

Если клиенты являются серверами, то есть нет выхода из системы, установите его на запуск, скажем, каждые 24 часа или как часто это происходит, деленное на 2. Разделите на 2, чтобы уменьшить вероятность двойного мусора, так сказать ..

1

Если вы можете убедить программу записать свои файлы журнала в корень буквы диска, скажем, T:, попробуйте

subst T: NUL:

потому что тогда работает перенаправление на ведро с битами, например, такие вещи:

echo > T:\some_file

Что не сработает, так это чтение с фальшивого диска T: создание папок и доступ для чтения файлов. Какой сорт имеет смысл, но, возможно, ваше приложение зависит от них.

0

Если вам не нужен поврежденный файл журнала, а путь / имя является известной переменной, попробуйте создать его как файл только для чтения от имени root / привилегированного пользователя, чтобы предотвратить его создание.

В качестве альтернативы вы можете создать том / раздел только для чтения или виртуальный диск ограниченного размера, на который вы ссылаетесь, чтобы ограничить размер файла.

Если программе действительно требуется файл журнала для продолжения работы и «kasplodes», когда она не может записать, то вам может потребоваться программное решение, такое как ротация журналов, если вы не смогли передать в ноль.

0

Вы можете создать отдельного пользователя Windows для запуска программы (должна быть защищенная паролем учетная запись), а затем щелкнуть правой кнопкой мыши диск, на который записываются журналы, и выбрать свойства. Затем нажмите на вкладку «Квота» и настройте квоту дискового пространства для этого пользователя. Наконец, удерживайте нажатой клавишу shift и щелкните правой кнопкой мыши по файлу .exe, который запускает программу, и выберите «Запуск от имени другого пользователя», выбрав только что созданную учетную запись.

0

Почему бы просто не написать сценарий, который удаляет все файлы .log, которые регулярно записываются в каталог-нарушитель (или в начале / конце использования программы)? Конечно, это лейкопластырь, пока вы не сможете заставить компанию исправить их программу.

Такие как:

do {}
While (Get-ChildItem C:\problemfile).Count = 0)
Remove-Item "c:\problemfile\*.log"
Write-Host “Program log file cleaned successfully”

Я новичок в PoSH, поэтому этот скрипт может не сработать, но я думаю, что концепция обоснована.

-1

Если вы предпочитаете жесткую ссылку, то вам придется пойти с

C:> mklink /h "C:\Program Files\MyNewHardlinkFolder" NUL

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