Pokazywanie postów oznaczonych etykietą batch. Pokaż wszystkie posty
Pokazywanie postów oznaczonych etykietą batch. Pokaż wszystkie posty

11 kwietnia 2012

Uruchamianie aplikacji w przeglądarce...

...czyli rejestrowanie własnego protokołu URL

Kilka razy podchodziłem do tego problemu. A to kombinowałem z zakręconym JavaScriptem (bezskutecznie), a to z pluginem do Firefoxa (z powodzeniem). Aż trafiłem na artykuł o rejestrowaniu własnych protokołów, tak jak wbudowany http://

Aby przeglądarka rozpoznawała wywołanie typu winbox:192.168.88.1;admin;admin; należy ten protokół zarejestrować w systemie.
Osobiście potrzebowałem kilku takich protokołów, przygotowałem mały zestaw skrypt+aplikacja aby ten proces zautomatyzować.

Plik konfiguracyjny url_launcher.config:
(Nazwa pliku jest ważna, na sztywno wpisana w aplikacji url_launcher.exe)

winbox;c:\bin\winbox.exe
putty;C:\BIN\putty.exe
quake;d:\games\Quake III Arena\quake3.exe

Pierwsza pozycja to nazwa protokołu, druga pozycja (oddzielona średnikiem) to ścieżka do pliku wykonywalnego obsługującego nasz protokół. Odpowiednie wpisy do rejestru wykonuje poniższy skrypt, wpisy są uzależnione od wpisów w pliku konfiguracyjnym.

Skrypt url_launcher.cmd
@echo off
set URL_LAUNCHER_PATH=%~dp0
set URL_LAUNCHER_PATH=%URL_LAUNCHER_PATH:\=\\%

echo Windows Registry Editor Version 5.00 > url_launcher.temp.reg
FOR /F "eol= tokens=1,2 delims=;" %%I in (url_launcher.config) do (
 (
 echo [HKEY_CLASSES_ROOT\%%I]
 echo @="Winbox URI"
 echo "URL Protocol"=""
 echo [HKEY_CLASSES_ROOT\%%I\DefaultIcon]
 echo @="\"%%J\",0"
 echo [HKEY_CLASSES_ROOT\%%I\shell]
 echo @="open"
 echo [HKEY_CLASSES_ROOT\%%I\shell\open]
 echo [HKEY_CLASSES_ROOT\%%I\shell\open\command]
 echo @="\"%URL_LAUNCHER_PATH%url_launcher.exe\" \"%%1\""
 ) >> url_launcher.temp.reg
)
regedit /s url_launcher.temp.reg
del url_launcher.temp.reg

Do tego wszystkiego, potrzebny jest mały programik, który obrobi dane wejściowe i wywoła nam aplikację docelową url_launcher.exe

Wracając do naszego protokołu winbox:192.168.88.1;admin;admin, po wpisaniu go w pasku adresu przeglądarki i uruchomieniu, zostanie uruchomiony program z parametrami c:\bin\winbox.exe 192.168.88.1 admin admin. Analogicznie z putty:8.8.8.8;-l;root zostanie uruchomiony c:\bin\putty.exe 8.8.8.8 -l root

Aby wszystko zadziałało bezproblemowo, wszystkie pliki powinny znajdować się w tym samym katalogu.

I na zakończenie: to rozwiązanie jest uniwersalne, działa w każdej przeglądarce.

5 lipca 2011

cwRsync portable

Często używam rsync do robienia backupów albo do synchronizowania zawartości folderów na wielu serwerach. Ostatnio postanowiłem, że kupię sobie dysk przenośny o dużej pojemności i wrzucę tam wszystkie najważniejsze swoje rzeczy. Chciałem mieć możliwość robienia tego z dowolnego miejsca przez net, więc pomyślałem o rsync.

Wszystko chciałem uruchamiać pod Windows, na dowolnym kompie do którego się podepnę. Stworzyłem prostą strukturę katalogów w głównym folderze dysku:
\bin
\backup
Zawartość z katalogu bin z folderu instalacyjnego cwRsync wrzuciłem do katalogu bin na dysku przenośnym.

Dorzuciłem też plik cwrsync.cmd do głównego katalogu. Poniżej zawartość pliku:
@echo off
setlocal
set CWRSYNCHOME=%~d0\bin
set CYGWIN=nontsec
set HOME=%HOMEDRIVE%%HOMEPATH%
set PATH=%~d0\bin;%PATH%

cygpath -a backup > backup.d
set /p BACKUP= < backup.d
del backup.d

rsync -rtlv --compress user@host::moduł %BACKUP%/ < %~d0\plik_z_hasłem
Problem z rsync polegał na tym, że ścieżka docelowa musi być absolutną ścieżką w formacie cygwin, np.: /cygdrive/h/backup. Wszelkie próby z relatywną ścieżką zawodziły.
Wykorzystałem także możliwość prostej autoryzacji w rsync, jedynym sposobem przekazania hasła, było proste przekierowanie go z zewnętrznego pliku.