Архив рубрики: Администрирование

Запускаем закрытую программу в Windows

Если ваша или не ваша программа по непонятным причинам закрывается, то лучше, конечно, разобраться по какой причине это происходит. Но бывают случаи, когда проще проверить запущен ли нужный процесс и если нужного процесса нет среди запущенных, то запустить его. Особенно это актуально, если программа чужая и исходников нет.
У меня такая ситуация случилась на сервере с ботами, которые должны трудиться круглые сутки, а они иногда «молча» выключаются.
В крон или планировщик вставляю следующий «батник»:

set fullname=c:\program\program.exe
set name=program.exe

tasklist /FO CSV /NH | find /I "%name%">nul

if %errorlevel% NEQ 0 (
start %fullname% 
echo %date% %time% "start closed process" >> loader.log
)

Пояснение построчно:

  • Строка 1: Полный путь к запускаемой программе
  • Строка 2: Название процесса, который надо мониторить в списке запущенных процессов
  • Строка 4: Команда tasklist получает список всех процессов, а команда find ищет в этом списке процесс, заданные в строке 2.
  • Строка 6: Если предыдущая команда (в строке 5) не вернула ошибку, то есть процесс найден в списке, то выполняется строка 7
  • Строка 7: запуск программы.
  • Строка 8: Запись в лог времени запуска нашей программы.

Можно было строку 2 (название запускаемого процесса) заменить на автоматическое получение из строки 1 таким образом:

for %%a in ("%fullname%") do set name=%%~nxa

Но в моем случае запускаемая программа и процесс имели разные названия.
Чаще всего запускаемый процесс и искомый в памяти — равны, так что лучше использовать в строке 2 вариант автоматического получения имени.

Меняем программно папку установки в Inno Setup

При использовании замечательного установщика Inno setup понадобилось сделать проверку на существование папки для установки программы. Если такая папка есть, то переименовать ее по определенному алгоритму (в моем случае добавлять единичку в конце имени) и не озадачивать пользователя переименованием; и уж тем более не перезаписывать программу. Вот такая задача: дать возможность ставить одну программу несколько раз в разные папки.

В скрипте меняем параметр DefaultDirName вот так:

DefaultDirName={code:newTargetDir}

И в конце скрипта в секции code пишем объявленную функцию newTargetDir:

function newTargetDir(Param : string):string;
var
 entry: String;
 i: integer;
begin
  entry := ExpandConstant('{sd}') + '\MyProgram\';
  i := 1;
  if DirExists(entry) then
    repeat
      entry := ExpandConstant('{sd}') + '\MyProgram' + IntToStr(i) + '\'; 
      i := i + 1;
    until not dirExists(entry);
  result := entry;
end;

Здесь встроенная переменная {sd} означает системный диск.

Конвертируем flac в mp3 из командной строки

Решил раз и навсегда закрыть для себя вопрос конвертации *.flac музыки в mp3 формат. Используя знания из статей под тэгом cmd, а именно из статей Как организовать цикл в bat или cmd файле и Как узнать размер и дату файла из командной строки подробно распишу как организовать конвертирование файлов из формата FLAC и формат MP3, находящихся в указанной в параметре cmd-скрипта папке и подпапках.
На написание этой статьи меня подтолкнула статья на хабре, только я буду делать скрипт под Windows.
Для конвертирования нам понадобятся установленные flac и lame, lame качал с сайта rarewares.org
В конце статьи я выложу архив со скриптом и нужными программами.

@echo off
echo flac2mp3.cmd [-r] папка
echo [-r] - удалять исходные flac файлы (не обязательно)
echo папка - папка с flac файлами. Обрабатываются так же и вложенные папки. Папка с пробелами указывается в кавычках - "папка"

set r=%1
set workdir=%2
if not exist %workdir% set workdir=%r%
if exist %r% set workdir=%r%
if not exist %workdir% (
echo Каталог не существует
exit
)

if /i %r%==-r (
  set r=1 
) else (
set r=0
)

for /f "tokens=*" %%a in (' dir /s /b %workdir%\*.flac ') do (
echo %%~da %%~pa %%~na
echo "%%~da%%~pa"%%~na.wav
flac -d -f "%%~a"
call :pack "%%~a"
rem lame -b 320 "%%~da%%~pa%%~na.wav" "%%~da%%~pa%%~na.mp3"
del /q "%%~da%%~pa%%~na.wav"
if %r%==1 del /q "%%~a"
)
exit

:pack
for /f "tokens=* delims== " %%i in ('metaflac.exe --show-tag=ARTIST %1 ') do set %%i
for /f "tokens=* " %%i in ('metaflac.exe --show-tag=TITLE %1 ') do set %%i
for /f "tokens=* " %%i in ('metaflac.exe --show-tag=ALBUM %1 ') do set %%i
for /f "tokens=* " %%i in ('metaflac.exe --show-tag=GENRE %1 ') do set %%i
for /f "tokens=* " %%i in ('metaflac.exe --show-tag=TRACKNUMBER %1 ') do set %%i
for /f "tokens=* " %%i in ('metaflac.exe --show-tag=DATE %1 ') do set %%i
echo lame -m j -q 0 -V 0 -s 44.1 --tt "%TITLE%" --tn "%TRACKNUMBER%" --ta "%ARTIST%" --tl "%ALBUM%" --ty "%DATE%" --tg "%GENRE%" "%~d1%~p1%~n1.wav" "%~d1%~p1%~n1.mp3"
lame -m j -q 0 -V 0 -s 44.1 --tt "%TITLE%" --tn "%TRACKNUMBER%" --ta "%ARTIST%" --tl "%ALBUM%" --ty "%DATE%" --tg "%GENRE%" "%~d1%~p1%~n1.wav" "%~d1%~p1%~n1.mp3"
exit /b 0


Меняем шлюз по умолчанию из командной строки

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

Для этого есть команда netsh. Читать далее Меняем шлюз по умолчанию из командной строки

Как я настраивал прозрачный прокси в Linux Ubuntu Server. Часть 2

В предыдущей статье я начал описывать как я настраивал прозрачный прокси на Linux Ubuntu Server и остановился на том, что в локальной сети есть интернет для всех пользователей, у кого в настройках сетевой карты прописан шлюз по умолчанию равным Ip-адресу нашего Linux-сервера. При таком положении вещей мы имеем в локальной сети удобный интернет в плане работы почтовых программ, различных обновлений для программ и операционной системы, то есть работаем в интернете как будто бы у нас прямое подключение к интернету, но есть один минус. Такой интернет не контролируется. Если надо какому-нибудь пользователю отключить интернет или установить максимальную скорость, а то и вообще запретить скачивать mp3 или avi файлы, то мы это сделать не сможем. И тут на помощь к нам приходит прозрачный прокси сервер. Читать далее Как я настраивал прозрачный прокси в Linux Ubuntu Server. Часть 2

Что такое svchost.exe и зачем он нужен?

В этой заметке я представляю копипаст статьи о процессе Windows svchost.exe т.к. этот файл часто бывает объектом вирусной атаки, да и вообще полезно знать как работает Windows, что в свою очередь поможет в борбе с вирусами.
Читать далее Что такое svchost.exe и зачем он нужен?

Как я настраивал прозрачный прокси в Linux Ubuntu Server. Часть 1

Для упрощения доступа в интернет из локальной сети решил всё-таки взять и настроить прозрачный прокси, т.к. очень долго собирался это сделать и давно хотел сделать так, чтобы в локальной сети не заботиться о настройках параметров прокси-сервера. Linux Ubuntu Server уже был установлен и настроен в качестве LAMP (Linux Apache MySQL PHP), о чем я ранее писал в шпаргалке, а так же еще в нескольких статьях о Linux Читать далее Как я настраивал прозрачный прокси в Linux Ubuntu Server. Часть 1