Search This Blog

2006-12-28

Let the more clever speak!

SOURCE:
http://www.e-nef.com/perl/ntperl.html.en

Install a Perl Script as a NT service

A NT service answers to an interface message call, to start it, pause it and stop it. So a signle script cannot be installed. The NT Ressource Kit 3 brings INSTSRV and ANYSRV, the first one to install a service name and the second one which is the service interface.

For example we create a service called PerlService :
`c:\\peliproc\\instsrv.exe PerlService c:\\peliproc\\srvany.exe`;
This installs an entry in the Registry Database. You can then finish hand installation as specified in the documentation or modify though the Win32::Registry the entries:

$p = "SYSTEM\\CurrentControlSet\\Services\\PerlService";
$main::HKEY_LOCAL_MACHINE->Open($p,$srv)||die "open: $!";
we are to create the key Parameters containing :
Application : the full path to the script
AppParameters : the execution parameters
AppDirectory : the path where from it will be executed
what we do this way:
$srv->Create("Parameters",$param)||die "Create: $!";
$param->SetValueEx("Application",0,REG_SZ,"c:\\perlproc\\scan.cmd");
$param->SetValueEx("AppParameters",0,REG_SZ,"2>c:\\tetmp\\toto.out");
$param->SetValueEx("AppDirectory",0,REG_SZ,"c:\\perlproc\\");
So we launch scan.cmd in the c:\perlproc directory (nota bene : it is needed to repeat the \ directory separator under NT, which serves to 'escape' i.e. use the specials caracters under Perl, so to have a \ we double it: \\). the argument is 2>c:\temp\toto.out, we redirect the standard error output (StdERR under perl, device 2 under each O.S.) to a file.

Now we can start the service.
`d:\\winnt\\system32\\net.exe start PerlService`;
The only thing that example hides is that the service is started with the SYSTEM account which under NT has more priorities than other account, even Administrator. It is possible through the Registry database to specify another user, but ... a password is needed, and I don't know how to add it trough the Registry database ...
Emulate a CRONTAB under NT

The at command and its interface winat can execute only asingle task a day, and this under the SYSTEM account. For some tasks, this is too constraining, e.g. scan a directory every 10 mn.

So, the best way is to create a NT service, and in the Perl script add an endless loop, and a sleep(600) for 10 mn i.e. 10*60 seconds.
Accessing an UNC reference under NT

It is easily done using the external command NET:
`d:\\winnt\\system32\\net.exe use \\server\ressource "password"
/USER:"user_name"'
The best way to catch the return message is to redirect with 2> to a file and scann it afterward.

Hence, the current environment (CurrentSet) has memorized the acces granting to this resource, and to access it after, you only need to specify the path as a normal path :
open(FIC,"\\serveur\ressource\vol1\DD-XF-FF.080") || warn "$0 $!";
and it is all !
Map a drive under NT

To map a drive is to associate to a resource(share) on the network, a device, i.e. driver, shown as a: à z: .

Thsi is done the same way under NT, but to use it as a service this introduces the problem that the current user may already use this device (only 23 available at least). A drive mapped is only under the current user profile; connection-less or under another login, it will not be anymore, unless this new profile map it itself.
Sending mail under NT

There is two ways:
Outlook:
The NT resource Kit brings a program called MAPISEND which permits to send a mail through an existing locally installed Outlook. It then need to only use the command line arguments.

SMTP Server or SMTP gateway under Exchange:
This more standard method, thanks to the libnet library from Perl (not available with ActiveWare, you then need to use hand-made sockets...) which gives through Net::SMTP all the necessary interface to this protocol;

The call is done with use Net::SMTP; , then you need to connect a SMTP Server :
$smtp = Net::SMTP->new("$MAILHOST");
and say who emits :
$smtp->mail("epierre\@e-nef.com");
and says to whom it is destined :
$smtp->to("$EMAIL");
and then we send the data :
smtp->data();
$smtp->datasend("To: $EMAIL\n");
$smtp->datasend("Cc: $CONTACT\n");
$smtp->datasend("Subject: Perl under NT, hard ?\n");
Here, we specify again who we write to, then we define a CC (a Carbon Copy, a copy to another person), and then the subject after a keyword Subject.We then add the content of the mail by $smtp->datasend("") that we repeat as long as we have lines to send, and we close the mail by
$smtp->dataend();
$smtp->quit();
The mail is now sent !
Using an Access Database through ODBC

Three steps are needed :
Have the corresponding ODBC driver (Start/Control Panel/ODBC 32/)
Add your base to the User DSN (see ODBC Home Page
Access it
The last step is done through Perl :
the database has an alias name through the DSN which serves to call it. We create the Database Connector Object :
$db = new Win32::ODBC($dsn);
we then form the SQL request :
$sql = "SELECT * FROM directory WHERE priority <= $priority2
ORDER BY name,firstname ";
for example.
we then emit the command :
$db->Sql($sql);
we get the result (if many) :
while ($db->FetchRow()) {
and we put in the variable the content of the record :
($name,$firstname,$tel)=$db->Data("name","firstname","tel")
}
we can check the return code through :
$db->Error();
and we close the database connection :
$db->Close();
Simple, simple ... a lot, yes !

Other Links

Labels

perl (41) Cheat Sheet (25) how-to (24) windows (14) sql server 2008 (13) linux (12) oracle (12) sql (12) Unix (11) cmd windows batch (10) mssql (10) cmd (9) script (9) textpad (9) netezza (8) sql server 2005 (8) cygwin (7) meta data mssql (7) metadata (7) bash (6) code generation (6) Informatica (5) cheatsheet (5) energy (5) tsql (5) utilities (5) excel (4) future (4) generic (4) html (4) perl modules (4) programs (4) settings (4) sh (4) shortcuts (4) поуки (4) принципи (4) Focus Fusion (3) Solaris (3) cool programs (3) development (3) economy (3) example (3) freeware (3) fusion (3) git cheat sheet (3) logging (3) morphus (3) mssql 2005 (3) nuclear (3) nz (3) parse (3) python (3) sftp (3) sofware development (3) source (3) sqlplus (3) table (3) vim (3) .Net (2) C# (2) China (2) GUI (2) Google (2) GoogleCL (2) Solaris Unix (2) ascii (2) awk (2) batch (2) cas (2) chrome extensions (2) code2html (2) columns (2) configuration (2) conversion (2) duplicates (2) excel shortcuts (2) export (2) file (2) free programs (2) informatica sql repository (2) linux cheat sheet (2) mssql 2008 (2) mysql (2) next big future (2) nsis (2) nz netezza cheat sheet (2) nzsql (2) ora (2) prediction (2) publish (2) release management (2) report (2) security (2) single-click (2) sqlserver 2005 (2) sqlserver 2008 (2) src (2) ssh (2) template (2) tools (2) vba (2) video (2) xlt (2) xml (2) youtube videos (2) *nix (1) .vimrc (1) .virmrc vim settings configs (1) BSD license (1) Bulgaria (1) Dallas (1) Database role (1) Dense plasma focus (1) Deployment (1) ERP (1) ExcelToHtml (1) GD (1) GDP (1) HP-UX (1) Hosting (1) INC (1) IT general (1) ITIL management bullshit-management (1) IZarc (1) Java Web Start (1) JavaScript anchor html jquery (1) Khan Academy (1) LINUX UNIX BASH AND CYGWIN TIPS AND TRICKS (1) Linux Unix rpm cpio build install configure (1) Linux git source build .configure make (1) ListBox (1) MIT HYDROGEN VIRUS (1) OO (1) Obama (1) PowerShell (1) Run-time (1) SDL (1) SIWA (1) SOX (1) Scala (1) Services (1) Stacks (1) SubSonic (1) TED (1) abstractions (1) ansible hosts linux bash (1) ansible linux deployment how-to (1) ansible yum pip python (1) apache (1) apache 2.2 (1) application life cycle (1) architecture (1) archive (1) arguments (1) avatar (1) aws cheat sheet cli (1) aws cli (1) aws cli amazon cheat sheet (1) aws elb (1) backup (1) bash Linux open-ssh ssh ssh_server ssh_client public-private key authentication (1) bash perl search and replace (1) bash stub (1) bin (1) biofuels (1) biology (1) books (1) browser (1) bubblesort (1) bugs (1) build (1) byte (1) cas_sql_dev (1) chennai (1) chrome (1) class (1) claut (1) cmdow (1) code generation sqlserver (1) command (1) command line (1) conf (1) confluence (1) console (1) convert (1) cool programs windows free freeware (1) copy-paste (1) csv (1) ctags (1) current local time (1) cygwin X11 port-forwarding mintty xclock Linux Unix X (1) cygwin bash how-to tips_n_tricks (1) cygwin conf how-to (1) data (1) data types (1) db2 cheat sheet (1) db2 starter ibm bash Linux (1) debt (1) diagram (1) dictionaries (1) digital (1) disk (1) disk space (1) documentation (1) dos (1) dubai (1) e-cars (1) electric cars (1) electricity (1) emulate (1) errors (1) exponents (1) export workflow (1) extract (1) fast export (1) fexp (1) file extension (1) file permissions (1) findtag (1) firewall (1) for loop (1) freaky (1) functions (1) fusion research (1) german (1) git gitlab issues handling system (1) google cli (1) google code (1) google command line interface (1) gpg (1) ha (1) head (1) helsinki (1) history (1) hop or flop (1) host-independant (1) how-to Windows cmd time date datetime (1) ibm db2 cognos installation example db deployment provisioning (1) ideas (1) image (1) informatica oracle sql (1) informatica repo sql workflows sessions file source dir (1) informatica source files etl (1) install (1) isg-pub issue-tracker architecture (1) it management best practices (1) java (1) jump to (1) keyboard shortcuts (1) ksh (1) level (1) linkedin (1) linux bash ansible hosts (1) linux bash commands (1) linux bash how-to shell expansion (1) linux bash shell grep xargs (1) linux bash tips and t ricks (1) linux bash unix cygwin cheatsheet (1) linux bash user accounts password (1) linux bash xargs space (1) linux cheat-sheet (1) linux cheatsheet cheat-sheet revised how-to (1) linux how-to non-root vim (1) linux ssh hosts parallel subshell bash oneliner (1) london (1) make (1) me (1) metacolumn (1) metadata functions (1) metaphonre (1) method (1) model (1) movie (1) multithreaded (1) mysql cheat sheet (1) mysql how-to table datatypes (1) n900 (1) nano (1) neteza (1) netezza bash linux nps (1) netezza nps (1) netezza nps nzsql (1) netezza nz Linux bash (1) netezza nz bash linux (1) netezza nz nzsql sql (1) netezza nzsql database db sizes (1) non-password (1) nord pol (1) nps backup nzsql schema (1) number formatting (1) nz db size (1) nz table count rows (1) nzsql date timestamp compare bigint to_date to_char now (1) on-lier (1) one-liners (1) one-to-many (1) oneliners (1) open (1) open source (1) openrowset (1) openssl (1) oracle PL/SQL (1) oracle Perl perl (1) oracle installation usability (1) oracle number formatting format-model ora-sql oracle (1) oracle templates create table (1) oracle trigger generic autoincrement (1) oracle vbox virtual box cheat sheet (1) oracle virtual box cheat sheet (1) outlook (1) parser (1) password (1) paths (1) perl @INC compile-time run-time (1) perl disk usage administration Linux Unix (1) perl modules configuration management (1) permissions (1) php (1) picasa (1) platform (1) postgreSQL how-to (1) powerShell cmd cygwin mintty.exe terminal (1) ppm (1) predictions (1) prices (1) principles (1) productivity (1) project (1) prompt (1) proxy account (1) public private key (1) publishing (1) putty (1) qt (1) read file (1) registry (1) relationship (1) repository (1) rm (1) scp (1) scripts (1) scsi (1) search and replace (1) sed (1) sendEmail (1) sh stub (1) shortcuts Windows sql developer Oracle (1) sidebar (1) silicon (1) smtp (1) software procurement (1) sofware (1) sort (1) sql script (1) sql_dev (1) sqlcmd (1) sqlite (1) sqlite3 (1) sshd (1) sshd cygwin (1) stackoverflow (1) stored procedure (1) stub (1) stupidity (1) subroutines (1) svn (1) sysinternals (1) tail (1) tar (1) temp table (1) templates (1) teradata (1) terminal (1) test (1) testing (1) theory (1) thorium (1) time (1) tip (1) title (1) tmux .tmux.conf configuration (1) tmux efficiency bash (1) tool (1) ui code prototyping tips and tricks (1) umask Linux Unix bash file permissions chmod (1) url (1) urls (1) user (1) utility (1) utils (1) vb (1) vbox virtual box cheat sheet (1) vim perl regex bash search for string (1) vim recursively hacks (1) vim starter (1) vim-cheat-sheet vim cheat-sheet (1) vimeo (1) visual stuio (1) warsaw (1) wiki (1) wikipedia (1) window (1) windows 7 (1) windows 8 (1) windows programs (1) windows reinstall (1) windows utility batch perl space Windows::Clipboard (1) wisdoms (1) workflow (1) worth-reading (1) wrapper (1) xp_cmdshell (1) xslt (1) youtube (1)

Blog Archive

Translate with Google Translate

My Blog List

VideoBar

This content is not yet available over encrypted connections.